[英]How to navigate dom tree from XML in java
下面是我正在使用的xml的示例,由于某些字段没有必要证明我的观点,因此我将其删除了。
我正在尝试从此xml解析订单。 但是,当我尝试解析每个订单的产品集时遇到问题。 处理第一个订单时,与其添加下面详细介绍的2个集合,不如将可在xml中找到的所有集合添加到第一订单中。 我不确定如何解决这个问题,因为这对我来说还很新。 下面是我的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>
问题是您正在调用doc.getElementsByTagName("set")
,该文件为您提供了整个文档中所有sets
的列表。 相反,您需要在每个订单上调用它,如下所示:
nList = doc.getElementsByTagName("order");
orders = new Order[nList.getLength()];
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
//get the sets for the current order only
NodeList setList = eElement.getElementsByTagName("set");
//now process the sets
}
您可以使用“ javax.xml.xpath” API从XML文档中获取所需的内容。 这些API是Java SE 5中引入的,并且提供了比“ getElementsByTagName”更多的控制权。
例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.