如何使用 XPath 通过另一个属性值获取属性内容?

How get attribute content by another attribute value with XPath?

我有XML喜欢:

<?xml version='1.0' encoding='UTF-8'?>
<ClinicalDocument xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
                  xmlns='urn:hl7-org:v3'
                  xmlns:ext='urn:hl7-RU-EHR:v1'
                  xsi:schemaLocation='urn:hl7-org:v3'>
    <author>
        <time value='20160809000000+0300'/>
        <assignedAuthor>
            <id root='1.2.643.5.1.13.3.25.1.1.100.1.1.70' extension='1'/>
            <id root='1.2.643.100.3' extension='03480134121'/>
            <id nullFlavor='NI'/>
        </assignedAuthor>
    </author>
</ClinicalDocument>

我必须在 id 中获取 extensionroot 的值 = 1.2.643.100.3。 我必须使用 XPath 2.0。 我试过:

  1. *[name()='ClinicalDocument']/*[name()='author']/*[name()='assignedAuthor']/*[name()='id' and @id='1.2.643.100.3']/@extension。不工作
  2. /*[name()='ClinicalDocument']/*[name()='author']/*[name()='assignedAuthor']/*[name()='id'][2]/@extension,但是id的顺序可以 混合。因此,我应该按 id 的值
  3. 检索

我需要它来通过 Java 的 XPathExpression

检索值

首先,绑定命名空间前缀,u:urn:hl7-org:v3

然后,这个 XPath,

//u:id[@root='1.2.643.100.3']/@extension

将 return 03480134121,按要求。

如果您无法绑定命名空间前缀,您可以改用此 XPath,

//*[local-name() ='id' and @root='1.2.643.100.3']/@extension

这也将 return 03480134121,根据要求。

正确的 XPath:/*[name()='ClinicalDocument']/*[name()='author']/*[name()='assignedAuthor']/*[local-name()='id' and @root='1.2.643.100.3']/@extension