XPath: Как выбрать узлы, которые не имеют атрибутов?


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

например:

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

3 ответа:

//node[not(@*)]

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

//node[count(@*)=0]

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

чтобы обратиться к комментарию Марека Чаплицкого и расширить ответ

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

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

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

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

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

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