返回空节点列表的命名空间感知文档



我正在尝试解析包含命名空间元素的通用XML。但是,getElementsByTagNameNS(( 总是返回一个空的 NodeList。例如,以下代码(我在代码中硬编码了一些 SAML 文本((因为它具有命名空间且可用(返回一个空的 NodeList:

NodeList test() {
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setNamespaceAware(true);
    documentBuilderFactory.setValidating(false);
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    Document document = documentBuilder.parse(new StringInputStream(
                    "<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">n" +
                    "    <saml:Assertion>n" +
                    "    </saml:Assertion>n" +
                    "</samlp:Response>"
    ));
    return document.getElementsByTagNameNS("saml", "Assertion");
}

问题是,我已将其设置为命名空间感知。据我所知,这应该返回一个带有一个结果的 NodeList。

编辑

有许多类似的问题,但它们都是由忘记启用命名空间感知的人提出的。

编辑

为了精确起见,我使用打开的JDK 1.8.0.151运行了这段代码。

getElementsByTagNameNS(( 的第一个参数是命名空间 URI,而不是前缀。所以应该是

return document.getElementsByTagNameNS("urn:oasis:names:tc:SAML:2.0:assertion", "Assertion");

最新更新