自从到目前为止我发现的每一个解释都令人困惑(至少对我而言),我一直在努力寻找解决问题的清晰方法。
我已经尝试过DOM读取器,但是由于该文件的XML文件更复杂,因此无法对其进行补充。
我的XML文件:
<Order>
<OrderID>
<OrderConfirmationDate>
<Date>
<Year>2000</Year>
<Month>10</Month>
<Day>06</Day>
</Date>
</OrderConfirmationDate>
<Adress>
<Name>Papel do Porto</Name>
<Address1>Rua da Alegria</Address1>
<Address2>nº1</Address2>
<City>Porto</City>
<PostalCode>4000-032</PostalCode>
<Country ISOCountryCode="PT">Portugal</Country>
</NameAddress>
这是我到目前为止所了解的代码
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
因此,我可以使用getDocumentElement()
轻松获得文档的根。而且我可以使用getNodeName()
轻松获得根节点。
但是如何获得"node.getNodeName().
(在这种情况下,我的意思是从<OrderConfirmationDate>
中获得<OrderID>
)
另外,我已经阅读到<Year>
和<Month>
之类的标签是节点<Date>
的ID。
答案 0 :(得分:1)
要选择特定节点,可以使用XPath表达式。
XPath xpath = XPathFactory.newDefaultInstance().newXPath();
XPathExpression expr = xpath.compile("//OrderConfirmationDate/Date");
Element orderConfirmationDateElement = (Element) expr.evaluate(doc, XPathConstants.NODE);
然后遍历节点的子节点:
NodeList dateChildren = orderConfirmationDateElement.getChildNodes();
for(int i = 0; i < dateChildren.getLength(); i++) {
if (dateChildren.item(i).getNodeType() == Node.ELEMENT_NODE) {
System.out.println(dateChildren.item(i).getNodeName() + ": " + dateChildren.item(i).getTextContent());
}
}
输出:
Year: 2000
Month: 10
Day: 06