2009-08-24 12 views

Odpowiedz

108
//node[not(@*)] 

To XPath, aby zaznaczyć wszystkie węzły o nazwach "Węzeł" w dokumencie bez atrybutów .

+0

+1 - to rozwiązanie bardziej XPath-Y. :) – Tomalak

+0

To jest miłe, ale nadal znajduje '' node class = ""> 'cokolwiek możemy z tym zrobić? –

+0

@MarekCzaplicki zobacz odpowiedź poniżej, aby rozwiązać ten problem. https://stackoverflow.com/questions/1323755/xpath-how-to-select-nodes-which-have-no-attributes/43910689#43910689 – pip

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

spowoduje zaznaczenie wszystkich < węzeł > zera atrybuty

3

Aby rozwiązać komentarz Marek Czaplicki i rozwinąć odpowiedź

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

.... wybierze wszystkie elementy węzła o zerowej atrybutów lub które posiadają atrybuty, które są puste. Jeśli był to tylko szczególny atrybut jesteś zainteresowany, a nie wszystkie z nich, a następnie można użyć

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

... i to by zaznaczyć wszystkie elementy węzłowe, które albo nie mają atrybut o nazwie attribute1 OR które mają atrybut attribute1, który jest pusty.

Oznacza to, że następujące elementy byłyby wybrane przez jedno z tych określeń xPath

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