XPath:属性のないノードを選択する方法は?


94

XPathを使用して、属性のないノード(属性カウント= 0)を選択する方法は?

例えば:

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

回答:


153
//node[not(@*)]

これは、属性なしでドキュメント内の「node」という名前のすべてのノードを選択するXPathです。


1
これはいいですが、それでも<node class=""></node>私たちができることは何でも見つかりますか?
Marek

1
@MarekCzaplickiこのケースに対処するには、以下の回答を参照してください。stackoverflow.com/questions/1323755/...
フィル・


9

Marek Czaplickiのコメントに対処し、回答を拡張するには

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

....属性がゼロであるか、またはすべて空の属性を持つすべてのノード要素を選択します。それがすべてではなく、興味のある特定の属性である場合は、次を使用できます

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

... attribute1これにより、ORと呼ばれる属性がなく、attribute1空の属性を持つすべてのノード要素が選択されます。

つまり、次の要素は、これらのxpath式のいずれかによって選択されます。

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

jsfiddle例を参照してくださいここに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.