名称空间感知文档返回空NodeList

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了名称空间感知文档返回空NodeList相关的知识,希望对你有一定的参考价值。

我试图解析包含名称空间元素的一般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">
" +
                    "    <saml:Assertion>
" +
                    "    </saml:Assertion>
" +
                    "</samlp:Response>"
    ));

    return document.getElementsByTagNameNS("saml", "Assertion");
}

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

编辑

有许多类似的问题,但是那些忘记启用命名空间感知的人都会问这些问题。

编辑

为了精确起见,我使用open JDK 1.8.0.151运行此代码。

答案

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

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

以上是关于名称空间感知文档返回空NodeList的主要内容,如果未能解决你的问题,请参考以下文章

前端开发常用js代码片段

前端开发中最常用的JS代码片段

JavaScript 学习-28.元素与节点(HTMLCollection 和 NodeList)

Android Java:在 onCreateView() 中返回空视图的片段

Android,从其他片段返回的空列表视图

文档对象模型-DOM