Найти элемент, все чьи дети имеют заданное значение - PullRequest
0 голосов
/ 15 июня 2010

например, у меня есть этот xml

<elements>
<a>
     <b>6</b> 
     <b>5</b>
     <b>6</b>
</a>
<a>
     <b>5</b>
     <b>5</b>
     <b>6</b>
</a>
<a>
     <b>5</b>
     <b>5</b>
     <b>5</b>
     <b>5</b>
</a>
</elements>

мне нужен запрос xpath, который должен вернуть мне родительский тег, только если все его дочерние элементы равны 5 (a [3] в данном случае),Нечто подобное

//b[text()="5"]/..

но с проверкой всех детских меток.Обратите внимание, что количество дочерних тегов может отличаться от узла к узлу.

Это возможно только с запросом xpath?

спасибо

Ответы [ 2 ]

4 голосов
/ 15 июня 2010
/elements/a[count(b) = count(b[.="5"])]
2 голосов
/ 15 июня 2010

Вместо поиска элементов, у которых все <b/> равны 5, вы можете искать элементы, у которых нет <b/> не равных 5. Это семантически то же самое, но более производительно, потому что вам не нужно Рассмотрим всех детей, если кто-либо из них не имеет «5», движок XPath может освободиться рано без оценки остальных.

Другими словами, «все b равны 5» - это то же самое, что «нет b, который не равен 5».

/elements/a[not(b != "5")]

Обратите внимание, что оба выражения верны, если <b/> нет вообще, вам нужно добавить еще один предикат для этого.

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