我需要从这个xml文档中获取一些值:
<node id="A." label="General Literature">
<isComposedBy>
<node id="A.0" label="GENERAL">
<isComposedBy>
<node label="Biographies/autobiographies"/>
<node label="Conference proceedings"/>
<node label="General literary works (e.g., fiction, plays)"/>
</isComposedBy>
</node>
<node id="A.1" label="INTRODUCTORY AND SURVEY"/>
<node id="A.2" label="REFERENCE (e.g., dictionaries, encyclopedias, glossaries)"/>
<node id="A.m" label="MISCELLANEOUS"/>
</isComposedBy>
</node>
在Java中,我如何只选择属性为id
和label
的节点,然后获取这些属性的值?
我已尝试使用此表达式使用XPath:
XPathExpression expr = path.compile("//*/@id | /@label");
但这不是我想要的。
答案 0 :(得分:1)
将XPathExpression expr = path.compile("//*[@id and @label]/(@id | /@label)");
与XPath 2.0或XPathExpression expr = path.compile("//*[@id and @label]/@id | //*[@id and @label]/@label");
与XPath 1.0一起使用。
答案 1 :(得分:1)
使用//node[@id and @label]
将获得具有node
和id
属性的所有label
个元素。然后,您需要遍历节点以获取其属性值。使用DOM的示例:
for(int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
NamedNodeMap attributes = node.getAttributes();
System.out.println(attributes.getNamedItem("id").getTextContent());
System.out.println(attributes.getNamedItem("label").getTextContent());
}
答案 2 :(得分:0)
尝试这种方式:
XPathExpression expr = path.compile("//*/*[@id and @label]");