Выбор элементов на основе нескольких условий в атрибутах в XPATH - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу выбрать атрибут Value элемента Term на основе значения другого атрибута элемента Term.Пожалуйста, посмотрите XML-ввод XPath здесь.

<Term Value="1025" Name="dnumber"/>
<Term Value="House" Name="adrtype"/>
<Term Value="My Address line 1" Name="adrline1"/>
<Term Value="My Address line 2" Name="adrline3"/>
<Term Value="12345" Name="adrpstcode"/>
<Term Value="07" Name="adrareacod"/>
<Term Value="123456789" Name="adrphone"/>
<Term Value="987654321" Name="adrmobile"/>
<Term Value="PARENT" Name="adrcntrel"/>

, например, здесь я хочу выбрать значение "Мой адрес строки 1", где Имя равно "adrline1", если Имя "adrtype" имеет значение "Дом", и еслилюбые другие значения тогда не.

, и я пытаюсь XPath Exression, как показано ниже.

"/Term[@Name='adrtype' and @Value='House']/Term[@Name='adrline1' ]/@Value"

, но я не получаю никакого значения.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Прежде всего, я думаю, что ваш XML нуждается в некоторой структуризации, например:

<Terms>
       <Term Value="1025" Name="dnumber"/>
       <Term Value="House" Name="adrtype"/>
       <Term Value="My Address line 1" Name="adrline1"/>
       <Term Value="My Address line 2" Name="adrline3"/>
       <Term Value="12345" Name="adrpstcode"/>
       <Term Value="07" Name="adrareacod"/>
       <Term Value="123456789" Name="adrphone"/>
       <Term Value="987654321" Name="adrmobile"/>
       <Term Value="PARENT" Name="adrcntrel"/>
</Terms>

После этого вы можете использовать это, чтобы найти и получить значение.Не забудьте использовать оператор |, это удобно в подобных ситуациях.Кроме того, используя XPath-тестер, такой как , этот может помочь вам сэкономить время в будущем.

(//Term[@Name='adrline1' ]/@Value | //Term[@Name='adrtype' and @Value='House'] )[2]
0 голосов
/ 12 декабря 2018

Если структура XML совпадает с заданным вводом, ваш XPath должен быть изменен следующим образом:

//Term[@Name='adrtype' and @Value='House']/following-sibling::Term[@Name='adrline1']/@Value

См. Это: http://xsltransform.net/jxWYjVB

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