从XPath获取值

时间:2014-06-14 17:09:18

标签: java xml xpath

我需要从这个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中,我如何只选择属性为idlabel的节点,然后获取这些属性的值? 我已尝试使用此表达式使用XPath:

XPathExpression expr = path.compile("//*/@id | /@label");

但这不是我想要的。

3 个答案:

答案 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]将获得具有nodeid属性的所有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]");