获取另一个父节点的子节点

时间:2016-03-02 23:46:27

标签: java xml dom

我有一个像下面这样的xml文件。

<Attributes>
<Map>
<entry key="others1" value="display1"/>
<entry key="others2" value="display2"/>
<entry key="Group1">
  <value>
    <List>
      <String>Test11</String>
      <String>Test12</String>
      <String>Test13</String>
    </List>
  </value>
</entry>
<entry key="Group2">
  <value>
    <List>
      <String>Test21</String>
      <String>Test22</String>
      <String>Test23</String>
    </List>
  </value>
</entry>
<entry key="others3" value="display3"/>
  </Map>
</Attributes>

我正在获取<entry>标记,如下所示 -

InputSource inputSource = new InputSource();

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
inputSource.setCharacterStream(new StringReader("test_file.xml"));
Document document = db.parse(inputSource);
NodeList entryNode = document.getElementsByTagName("entry");

for (int i = 0; i < entryNode.getLength(); i++) { 
   NamedNodeMap attributeMap = entryNode.item(i).getAttributes(); 
   Attr key = (Attr) attributeMap.item(0);
   Attr value = (Attr) attributeMap.item(1);
}  

我想从entry key="Group2"获取子节点值列表。

请帮忙。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

最好通过评估XPath表达式来解决这个问题:

XPath path = XPathFactory.newInstance().newXPath();

String expression = "//entry[@key=\"Group2\"]/value/List";

Node list = (Node) path.evaluate(expression, document, XPathConstants.NODE);

根据您的具体需要,您需要更改XPath表达式和/或返回类型。

这将返回<{p}的Node

<List>
  <String>Test11</String>
  <String>Test12</String>
  <String>Test13</String>
</List>

XPath表达式的说明

//entry

在文档的任何位置选择<entry>标记

[@key="Group2"]

将这些元素限制为属性key具有值Group2

的元素
/value/List

选择作为<List>元素的子元素的<value>元素,这些元素是前面的XPath部分匹配的元素的子元素