XPath для сравнения двух разных атрибутов двух элементов - PullRequest
4 голосов
/ 16 июня 2010

Предположим, у меня есть этот XML:

<x>
<e s="1" t="A"/>
<e s="2" t="A"/>
<e s="1" t="B"/>
</x>

Есть ли способ написать xpath, чтобы найти, есть ли два разных узла с именем "e", которые имеют одинаковое значение для @s, но разные значения @t. Первая часть проста:

//e[@s = //e/@s] 

как и вторая часть:

//e[@t != //e[@t]]

Но я не вижу способа создать xpath, который сравнивал бы два разных атрибута для двух отдельных элементов "e". Есть ли способ в синтаксисе xpath или он безнадежен?

1 Ответ

2 голосов
/ 16 июня 2010

Запрошенные узлы не могут быть выбраны одним выражением XPath 1.0 .

Если языком хостинга является XSLT 1.0, то можно построить выражение, использующее функцию current(), которая выбирает нужные узлы.

Используйте следующее выражение XPath 2.0:

for $x
           in
             /*/e[@s
                 = (preceding-sibling::e
                   |
                    following-sibling::e
                    )
                     /@s
                ],

           $y in /*/e[@s = $x/@s]

         return
            $x[not(@t = $y/@t)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...