Jak za pomocą XPath wybrać węzły, które nie mają atrybutów (gdzie liczba atrybutów = 0)?
Na przykład:
<nodes>
<node attribute1="aaaa"></node>
<node attribute1="bbbb"></node>
<node></node> <- FIND THIS
</nodes>
Odpowiedzi:
//node[not(@*)]
To jest XPath do wybierania wszystkich węzłów o nazwie „węzeł” w dokumencie bez żadnych atrybutów.
Aby odnieść się do komentarza Marka Czaplickiego i rozszerzyć odpowiedź
//node[not(@*) or not(string-length(@*))]
.... wybierze wszystkie elementy węzłów z zerowymi atrybutami LUB z atrybutami, które są wszystkie puste. Gdyby był to tylko konkretny atrybut, który Cię interesuje, a nie wszystkie, możesz użyć
//node[not(@attribute1) or not(string-length(@attribute1))]
... a to spowoduje wybranie wszystkich elementów węzłów, które albo nie mają atrybutu o nazwie attribute1
OR, które mają attribute1
atrybut, który jest pusty.
Oznacza to, że następujące elementy zostałyby wybrane przez którekolwiek z tych wyrażeń xpath
<nodes>
<node attribute1="aaaa"></node>
<node attribute1=""></node> <!--This one -->
<node attribute1="bbbb"></node>
<node></node> <!--...and this one -->
</nodes>
Zobacz przykład jsfiddle tutaj
<node class=""></node>
coś, co możemy z tym zrobić?