XPath: Bagaimana memilih node yang tidak memiliki atribut?

95

Menggunakan XPath, bagaimana memilih node yang tidak memiliki atribut (di mana jumlah atribut = 0)?

Sebagai contoh:

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

Jawaban:

154
//node[not(@*)]

Itulah XPath untuk memilih semua node bernama "node" dalam dokumen tanpa atribut apa pun.

48klocs
sumber
1
Ini bagus, tapi masih <node class=""></node>ada yang bisa kita lakukan?
Marek
1
@MarekCzaplicki lihat jawaban di bawah untuk menangani kasus ini. stackoverflow.com/questions/1323755/…
phil
23
//node[count(@*)=0]

Akan memilih semua <node> dengan atribut nol

erik
sumber
9

Untuk menjawab komentar Marek Czaplicki dan memperluas jawabannya

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

.... akan memilih semua elemen node dengan atribut nol ATAU yang memiliki atribut yang semuanya kosong. Jika itu hanya atribut tertentu yang Anda minati, bukan semuanya, Anda dapat menggunakan

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

... dan ini akan memilih semua elemen node yang tidak memiliki atribut bernama attribute1OR yang memiliki attribute1atribut kosong.

Artinya, elemen berikut akan dipilih oleh salah satu ekspresi xpath ini

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

Lihat contoh jsfiddle di sini

phil
sumber