Xpath没有以“//”

时间:2017-02-13 15:10:26

标签: java xml xpath xml-parsing

这让我发疯,我正在开发一个需要我解析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 个答案:

没有答案