首页 > 解决方案 > 获取带有 id 或 name 的 XML 节点

问题描述

我有以下 xml 文件

<Capabilities>
    <Capability id="test" name="test">
       <File Path="bin/test.exe" />
       <File Path="bin/abc.dll" />
       <File Path="bin/xyz.dll" />
       <File Path="LICENSE" />
       <File Path="third-party-programs.txt" />
    </Capability>
    <Capability id="test1" name="test1">
       <File Path="bin/test1.exe" />
       <File Path="LICENSE" />
       <File Path="third-party-programs.txt" />
    </Capability>
<Capabilities>

我想获取 id="test1" 的节点,但不遍历所有节点。我尝试在java中使用以下

try {
        documentBuilder = documentBuilderFactory.newDocumentBuilder();
        document = documentBuilder.parse(xmlFile);
    } catch (ParserConfigurationException | SAXException | IOException e) {
        e.printStackTrace();
    }
    // get the node with id="test1"
    Node capabilityNode = document.getElementById("test1");

从上面的代码我得到空值。getElementbyId 文档说 id 属性必须具有类型 ID。如何确保 id 是 ID 类型,或者有没有办法可以直接获取节点而无需按名称循环?

谢谢

标签: javaxmldomxml-parsing

解决方案


您可以getElementById使用XPath. 此函数将返回第一个id具有 value属性的元素idValue

public static Node getElementById(Document document, String idValue) throws XPathExpressionException {
    XPath xpath = XPathFactory.newInstance().newXPath();
    return (Node) xpath.evaluate(String.format("//*[@id='%s']", idValue), document, XPathConstants.NODE);
}

推荐阅读