0

我有这种 XML:

<?xml version="1.0" encoding="UTF-8"?>
<documentAnswer xmlns="http://schemas.pkh.hr/doc/2013/documents/rda_30" domainName="rda" domainVersion="3.0">
<answerTimestamp>2013-08-21T13:35:25.894</answerTimestamp>
<correct>
    <docId>RDA2_29F81D27-1409BE49E2E-7FF8</docId>
    <attachments>
        <attachment>
            <format>application/pdf</foraat>
            <generatedType>StampanNaBlanko</generatedType>
            <encodedPdf>JVBERiYKJSVFT0YK</encodedPdf>
        </attachment>
    </attachments>
</correct>

这些附件标签可以是一个或多个。我正在尝试使用 Java 中的附件标签获取 NodeIterator

XPathAPI.selectNodeIterator(node, "/documentAnswer/correct/attachments/attachment")

然后迭代,但我没有成功。我猜测问题出在 xpath 中,并且与命名空间有关,但不知道如何解决。我尝试使用这种 xpath 但没有成功:

XPathAPI.selectNodeIterator(节点,“/rda:documentAnswer/correct/attachments/attachment”,“rda”,“ http://schemas.pkh.hr/doc/2013/documents/rda_30 ”)

4

3 回答 3

1
/rda:documentAnswer/correct/attachments/attachment

在这里,您仅将rda命名空间分配给根元素,但它在 XML 中被声明为默认命名空间。因此,您的所有元素都在该名称空间中。你必须使用

/rda:documentAnswer/rda:correct/rda:attachments/rda:attachment

不幸的是,XPath 标准不支持默认命名空间的声明。

于 2013-08-21T12:34:49.000 回答
0

3种方法:

用于查询 QNames 而不仅仅是 local-names() 的嵌入命名空间

带有更正的标题:

<ns0:documentAnswer xmlns:ns0="http://schemas.pkh.hr/doc/2013/documents/rda_30" domainName="rda" domainVersion="3.0">

路径

    /ns0:documentAnswer

B-使用 local-name() 函数仅查询本地名称

    /*[local-name()="documentAnswer"]

C-Query 本地名称和命名空间(查询 QNames)

    /*[local-name()="documentAnswer" and namespace-uri()='http://schemas.pkh.hr/doc/2013/documents/rda_30']

http://nealwalters.blogspot.fr/2005/01/common-xpath-examples-questions-issues.html

于 2013-08-21T12:32:31.703 回答
0

如果您愿意,可以通过以下方式忽略名称空间:

/*:documentAnswer/*:correct/*:attachments/*:attachment
于 2013-08-21T13:48:17.093 回答