XPath: Как выбрать узлы, которые не имеют атрибутов? - PullRequest
81 голосов
/ 24 августа 2009

Используя XPath, как выбрать узлы, которые не имеют атрибутов (где атрибут count = 0)?

Например:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>

Ответы [ 3 ]

133 голосов
/ 24 августа 2009
//node[not(@*)]

Это XPath для выбора всех узлов с именем «узел» в документе без каких-либо атрибутов.

22 голосов
/ 24 августа 2009
//node[count(@*)=0]

Выберет все с нулевыми атрибутами

5 голосов
/ 11 мая 2017

Чтобы ответить на комментарий Марека Чаплицкого и развернуть ответ

//node[not(@*) or not(string-length(@*))]

.... выберет все элементы узла с нулевыми атрибутами ИЛИ с атрибутами, которые все пусты. Если бы это был просто интересующий вас атрибут, а не все из них, то вы могли бы использовать

//node[not(@attribute1) or not(string-length(@attribute1))]

... и это выберет все элементы узла, которые либо не имеют атрибута с именем attribute1 ИЛИ с атрибутом attribute1, который пуст.

То есть следующие элементы будут выбраны любым из этих выражений xpath

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>

См. Пример jsfiddle здесь

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