XPath: Як вибрати вузли, які не мають атрибутів?


94

Як використовувати XPath, як вибрати вузли, які не мають атрибутів (де кількість атрибутів = 0)?

Наприклад:

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

Відповіді:


153
//node[not(@*)]

Це XPath для вибору всіх вузлів в документі з назвою "node" без будь-яких атрибутів.


1
Це приємно, але все ж знаходимо <node class=""></node>все, що ми можемо з цим зробити?
Marek

1
@MarekCzaplicki див. Відповідь нижче, щоб вирішити цю справу. stackoverflow.com/questions/1323755/…
філ

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

Вибере всі <node> з нульовими атрибутами


9

Щоб звернутися до коментаря Марека Чаплічки та розширити відповідь

//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 тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.