Below is a sample of the xml I am using, I have striped out some of the fields as they are unnecessary to demonstrate my point.
I am trying to parse the orders from this xml. However, I encounter a problem when I try to parse the product sets for each order. When the first order is processing, instead of adding the 2 sets detailed below, it will add all the sets it can find in the xml into the first order. I am not sure how to get around this as this is all quite new to me. Below is my java...
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
// Create a list of orders and sub elements
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
nList = doc.getElementsByTagName("order");
setList = doc.getElementsByTagName("set");
orders = new Order[nList.getLength()];
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
temp = new Order();
// Populate order with details from XML
parseClientDetails(eElement);
// Add sets
parseSets();
temp.setSets(setArray);
orders[i] = temp;
}
...
private void parseSets() {
Node nNode;
Element element;
for (int c = 0; c < setList.getLength(); c++) {
nNode = setList.item(c);
element = (Element) nNode;
tempSet = new Set();
tempSet.setBandwidth(getValue("bandwidth", element));
tempSet.setCategory(getValue("category", element));
tempSet.setSet_package(getValue("package", element));
setArray.add(tempSet);
}
}
XML:
<orderSet>
<order>
<customer name="SelectCustomerDetails">
<clientId>UK12345</clientId>
<etc>...</etc>
</customer>
<product>
<set>
<category>Silver</category>
<package>3000IP</package>
<bandwidth>160</bandwidth>
</set>
<set>
<category>Silver</category>
<package>3000IP</package>
<bandwidth>320</bandwidth>
</set>
</product>
</order>
<order>
...
</order>
</orderSet>