我一直在努力为我的问题找到一个明确的解决方案,因为到目前为止我发现的每一个解释都是令人困惑的(至少对我来说是这样)。
我已经尝试过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(). (在本例中,我的意思是从<OrderID>中获取<OrderConfirmationDate> )另外,我已经了解到像<Year>和<Month>这样的标记是节点<Date>的Ids。
发布于 2020-10-26 04:42:08
要选择特定节点,可以使用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: 06https://stackoverflow.com/questions/64526165
复制相似问题