web-dev-qa-db-ja.com

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

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

例えば:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>
84
Zanoni
//node[not(@*)]

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

137
48klocs
//node[count(@*)=0]

属性がゼロのすべての<node>を選択します

22
erik

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

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

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

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

...そして、これは、attribute1属性が空のattribute1 ORという属性を持たないすべてのノード要素を選択します。

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

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

Jsfiddleの例を参照してください here

5
phil