当前位置: 首页 > 面试题库 >

在Java中获取具有名称空间的XML节点

轩辕越泽
2023-03-14
问题内容

我有下一个XML:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" 
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
         xmlns:ccts="urn:un:unece:uncefact:documentation:2"
         xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
         xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"
         xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"
         xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ext:UBLExtensions>
        <ext:UBLExtension>
            <ext:ExtensionContent>
                <!-- SOME CODE HERE -->
            </ext:ExtensionContent>
        </ext:UBLExtension>
        <ext:UBLExtension>
            <ext:ExtensionContent>
                <!-- I WANT TO GET THIS NODE -->
            </ext:ExtensionContent>
        </ext:UBLExtension>
    </ext:UBLExtensions>

如何获得此节点?我试过了

Document doc = dbf.newDocumentBuilder().parse(new FileInputStream(PATH_TO_MY_XML));
NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("*", "UBLExtension");

但它返回一个空数组。我该怎么做?


问题答案:

您需要确保XML解析器支持名称空间。

您还应该确保关闭FileInputStream,最好使用try-with-resources。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);

Document doc;
try (InputStream xmlStream = new FileInputStream(PATH_TO_MY_XML)) {
    doc = dbf.newDocumentBuilder().parse(xmlStream);
}
NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("*", "UBLExtension");


 类似资料:
  • 问题内容: 我想获取标记之间的所有内容,但是由于urn:名称空间,我不知道该怎么做。 有任何想法吗? 问题答案: 简短的答案:使用XPath 。这样:将返回 或者,您可以实现一个映射名称空间名称和URI的,并在查询之前在XPath对象上对其进行设置。 看一下这篇博客文章, 更新: 该文章已结束,您可以在webarchive上看到它 解决方案1样本: 解决方案2样本: 编辑 这是一个完整的示例,它可

  • 问题内容: 我正在一个没有架构的项目中,我必须手动解析xml响应。我的问题是我无法使用xml注释获得一些价值。 例如,xml类似于: Java类是: 我可以获取操作和响应,但不能在responsedata中获取数字,有人可以告诉我如何处理using注释吗?太感谢了! 另一个问题是:我的响应数据中有多个…。如何获取Java代码中的所有值。 ->我解决了多个相同的标签,只需设置List,注释将自动生成

  • 问题内容: 有“原始” XML 以这种方式解析XML 然后我试图通过XPath提取会话ID 在这里测试 http://www.xpathtester.com/xpath/678ae9388e3ae2fc8406eb8cf14f3119 当XML简化为此 这个XPath可以完成工作 如何使用Java从“原始” XML中提取会话ID? 更新:JDK 1.6 问题答案: 答案是您需要正确使用名称空间和名

  • 问题内容: youtube.xml update_videos.php 问题答案: 所以我找到了一种使用xpath的方法,这是最好的方法还是与我的问题代码保持一致的方法?只是出于好奇。

  • 问题内容: 我正在做这个小项目,我的任务是读取xml文件并进行解析,以便可以将其存储在类中。这是xml示例。它是用SOAP编写的,我要做的就是获取 xmlns:ns2="http://abc.examples.com 问题答案: 要使用Java中的命名空间进行XPath查询,我相信您需要执行以下操作: 您还需要先调用;,然后再创建来解析文档。

  • 问题内容: 我正在通过Java创建多个XML文件,到目前为止一切正常,但是现在尝试创建带有名称空间前缀节点的文件时遇到了问题,例如,使用已经重构的代码版本适用于没有名称空间的普通xml文件。 被抛出的错误是: 抱歉,德国人说“指定的XML符号无效”。 发生错误的代码行: 为了消除错误导致转义较长的字符串或那些行中的某些内容的可能性,我也尝试仅使用,但这会导致相同的错误。 这就是为什么我认为它与名称