我正在尝试解析包含命名空间元素的通用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");