2016-05-23 11 views
0

ich habe ein Problem mit XPath-Funktionwas ist die richtige XPath-Funktion für ausschließen den Knoten

Ich will nur „Erste Zeile“ und „vierte Zeile“ bekommen, aber ich will es mit Logik erhalten, die Anweisung hat,

erste Aussage ist i mit Knoten erhalten möchten, die eine Klasse „row1“ hat Zweitens möchte ich alle Knoten ignorieren, die eine Klasse „excludeRow“ hat

ich versucht habe, nicht (starts-with) und nicht (enthält (@class, "excludeRow")) Funktion kann aber immer noch nicht bekommen was ich will.

Dies ist mein Beispielfall

<tr><td>"Header"</td></tr> 
<tr class="row1"><td>"First Row"</td><tr> 
<tr class="excludeRow1"><td>"Second Row"</td></tr> 
<tr class="excludeRow2"><td>"Third Row"</td></tr> 
<tr><td>"Fourth Row"</td></tr> 
<tr class="excludeRow3"><td>"Fifth Row"</td></tr> 

Diesen mein letzter Code, hoffentlich jemand dies korrigieren oder lösen: D

  1. ‚// tr [@ class = "row1" und nicht (starts-with (@class, 'excludeRow'))) ';
  2. '// tr [nicht (enthält (@class,' excludeRow '))]';

gibt es keine Fehler in diesem Code aber das Ergebnis ist, wie ich

Vielen Dank allen nicht zu erwarten, Grüße! : D

Antwort

0

Sie sollten or Zeile auszuwählen verwendet haben, dass entweder hat class Attribut gleich ‚row1‘ oder nicht class Attribut mit ‚excludeRow‘ hat zu starten. Dies umfasst jedoch die Zeile "Kopfzeile". Wenn Sie überspringen „Header“ wollen, fügen Sie eine weitere Bedingung überspringen erste tr:

//tr[position() > 1][@class='row1' or not(starts-with(@class, 'excludeRow'))] 

Die obige XPath sollten die beiden erwarteten Zeilen „Erste Zeile“ und „vierte Zeile“ (siehe Demo in xpathtester)

kehrt
+0

danke mann für die lösung meines problems! : D ich wusste nicht, dass es xpathtester auch online gibt: D –

+0

@HaryonoSariputra Sama-sama bro: D Yup, dieser xpath Tester würde viel helfen, deinen XPath unabhängig zu prüfen – har07

0

Vor allem, bedenken Sie, dass Sie ungültige HTML verwenden, da Ihre zweite Zeile nicht ordnungsgemäß geschlossen ist. Aber wenn es richtig geschlossen wird, sollten die folgenden Anweisungen funktionieren:

  1. //tr[@class="row1"]
  2. //tr[not(contains(@class, "excludeRow")) and not(@class="row1") and not(position()=1)]

Die erste Anweisung wählt einfach alle tr mit einer Klasse gleich row1.

Die zweite Anweisung wählt alle tr aus, die nicht excludeRow innerhalb ihres Klassenattributs enthalten und zusätzlich die in der ersten Anweisung ausgewählten Zeilen ausschließen. Am Ende, um die Kopfzeile auszuschließen, wird das erste Element ausgeschlossen.

Verwandte Themen