有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Xpath不返回带“/”的任何内容

这让我抓狂,我正在从事一个需要解析XML文档(UBL格式)的项目

这些文档可能的正文中有一个或多个附件(base64编码),我的工作是将它们导出。 我还需要删除一些其他字段(其中一些字段可以工作),为简洁起见,我将名称空间重命名为“A:”、“B:”,等等

示例xml(高度简化)

<Invoice>
    <A:ID>*someID*</A:ID>
    <B:AdditionalDocumentReference>
        <A:ID>attachmentID</A:ID>
        <B:OrderReference>
            <A:ID>16009896</A:ID>
        </B:OrderReference>
        <A:DocumentType>PDF</A:DocumentType>
        <B:Attachment>
            <A:EmbeddedDocumentBinaryObject mimeCode="application/pdf">
                *base64 encoded string*
            </A:EmbeddedDocumentBinaryObject>
       </B:Attachment>
    </B:AdditionalDocumentReference>
</Invoice>

问题1:我不能假设根元素将被命名为“Invoice”

要检索我使用的附件,请执行以下操作:

XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList)xPath.evaluate("//AdditionalDocumentReference",
                    doc.getDocumentElement(), XPathConstants.NODESET);

这不会返回任何结果,我也尝试过:

.//AdditionalDocumentReference

//B:AdditionalDocumentReference

两者都不起作用,唯一起作用的是:

//Invoice/AdditionalDocumentReference

但正如我在上面所说的,根元素的命名可能会有所不同,因此不是一个真正的选项

我在从文档中获取ID时遇到了同样的问题。我认为最简单的方法是使用:

//ID

我知道第一次出现的ID标记是文档的ID,但这也不会返回任何内容。 仅当我使用以下选项时,它才起作用:

//Invoice/ID

现在来看真的奇怪的部分。看到订单参考标签了吗?我用这一行:

xPath.evaluate("//OrderReference/ID", document)

而且它是有效的

我做错了什么


共 (0) 个答案