获取节点内节点的值

时间:2020-10-25 16:36:42

标签: java xml

自从到目前为止我发现的每一个解释都令人困惑(至少对我而言),我一直在努力寻找解决问题的清晰方法。

我已经尝试过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。

1 个答案:

答案 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