XPath: как выбрать узлы без атрибутов?


96

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

Например:

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

Ответы:


155
//node[not(@*)]

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


1
Это хорошо, но он все равно находит, <node class=""></node>что мы можем с этим поделать?
Марек

1
@MarekCzaplicki см. Ответ ниже, чтобы рассмотреть этот случай. stackoverflow.com/questions/1323755/…
Фил


9

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

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

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.