我有一个像下面这样的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"
获取子节点值列表。
请帮忙。
提前谢谢。
答案 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>
//entry
在文档的任何位置选择<entry>
标记
[@key="Group2"]
将这些元素限制为属性key
具有值Group2
/value/List
选择作为<List>
元素的子元素的<value>
元素,这些元素是前面的XPath部分匹配的元素的子元素