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

时间:2016-09-05 18:16:40

标签: java xml xpath xpath-2.0

我有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>

我必须在extensionid获得root 1.2.643.100.3的值= *[name()='ClinicalDocument']/*[name()='author']/*[name()='assignedAuthor']/*[name()='id' and @id='1.2.643.100.3']/@extension。 我必须使用XPath 2.0。 我试过了:

  1. /*[name()='ClinicalDocument']/*[name()='author']/*[name()='assignedAuthor']/*[name()='id'][2]/@extension。不工作
  2. id,但id s的顺序可以 混合。那么,我应该通过else context.arc(0, 0, r0, a10, a00, cw); 的值
  3. 来检索

    我需要通过Java的XPathExpression检索价值

2 个答案:

答案 0 :(得分:1)

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

然后,这个XPath,

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

将根据要求返回03480134121

如果您无法绑定名称空间前缀,则可以改为使用此XPath,

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

也会根据要求返回03480134121

答案 1 :(得分:0)

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