给定多个条件时,使用XPath返回一个属性

时间:2011-09-27 17:03:01

标签: xml xpath

我正在尝试检索元素

的一个(也是唯一一个)
/Document/docOf/serviceEvent/effectiveTime/@value 

时的

/Document/docOf/tempId/@root="1.3.5"

docOf元素可以按任何顺序出现,不能保证具有被追捧的tempId的元素是xml中的第一个元素。

我一直在尝试将position()函数与tempId / @ root =“1.3.5”结合使用 但发现它不按照我打算的方式工作。如果我写

tempId/@root="1.3.5" and position()=1 

我得到了正确的结果,但只有当tempId / @ root =“1.3.5”元素出现在具有其他tempIds的元素之前。如何从具有正确tempId / @ root的元素中检索effectiveTime / @值并仅检索一次?

<Document>
    <docOf>
        <tempId root="1.3.2"codeSystem="11.2.3"/>
        <serviceEvent>
            <code code="UXZX0A"/>
        </serviceEvent>
    </docOf>
    <docOf>
        <tempId root="1.3.5"/>
        <serviceEvent classCode="ACT">
            <effectiveTime value="20101122145613+0100"/>
        </serviceEvent>
    </docOf>
    <docOf>
        <tempId root="1.3.5"/>
        <serviceEvent classCode="ACT">
            <effectiveTime value="20101122145613+0100"/>
        </serviceEvent>
    </docOf>
    <docOf>
        <tempId root="1.3.2"/>
        <serviceEvent>
            <code code="UXZX0A" codeSystem="11.2.3"/>
        </serviceEvent>
    </docOf>
</Document>

1 个答案:

答案 0 :(得分:1)

尝试:

/Document/docOf[tempId/@root='1.3.5'][1]/serviceEvent/effectiveTime/@value

首先获取root = 1.3.5的所有文档,然后从该集合中选择第一个节点。然后它从中提取value属性。