Вернуть один атрибут с XPath при заданных нескольких условиях - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь получить одно (и только одно) вхождение элемента

/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" появляются перед элементами с другими временными идентификаторами.Как получить значениеffectiveTime / @ из элемента с правильным корнем tempId / @ и получить его только один раз?

<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 Ответ

1 голос
/ 27 сентября 2011

Попробуйте:

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

Сначала он получает все документы с root = 1.3.5, а затем выбирает первый узел из этого набора. Затем он извлекает из него атрибут value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...