459 Stimmen

Wie kann ich mit XPath ein Element anhand seiner CSS-Klasse finden?

Auf meiner Webseite gibt es eine div mit einer class namens Test .

Wie kann ich sie mit XPath ?

701voto

meder omuraliev Punkte 177513

Dieser Selektor sollte funktionieren, wird aber effizienter sein, wenn Sie ihn durch Ihr geeignetes Markup ersetzen:

//*[contains(@class, 'Test')]

Oder, da wir wissen, dass das gesuchte Element ein div :

//div[contains(@class, 'Test')]

Da dies aber auch auf Fälle wie class="Testvalue" ou class="newTest" Die von @Tomalak in den Kommentaren bereitgestellte Version lautet besser :

//div[contains(concat(' ', @class, ' '), ' Test ')]

Wenn Sie wirklich sicher sein wollen, dass es korrekt übereinstimmt, können Sie auch die Funktion normalize-space verwenden, um Leerzeichen um den Klassennamen herum zu entfernen (wie von @Terry erwähnt):

//div[contains(concat(' ', normalize-space(@class), ' '), ' Test ')]

Beachten Sie, dass in all diesen Versionen das * am besten durch den Namen des Elements ersetzt werden sollte, mit dem Sie tatsächlich übereinstimmen möchten, es sei denn, Sie möchten jedes einzelne Element des Dokuments nach der gegebenen Bedingung durchsuchen.

224voto

Olli Puljula Punkte 2147

Der einfachste Weg..

//div[@class="Test"]

Angenommen, Sie möchten Folgendes finden <div class="Test"> wie beschrieben.

70voto

John Slegers Punkte 41127

En NUR die richtige Vorgehensweise mit XPath :

//div[contains(concat(" ", normalize-space(@class), " "), " Test ")]

Die Funktion normalize-space entfernt führende und nachgestellte Leerzeichen und ersetzt auch Folgen von Leerzeichen durch ein einzelnes Leerzeichen.


Hinweis

Wenn Sie nicht viele dieser Xpath-Abfragen benötigen, sollten Sie eine Bibliothek verwenden, die CSS-Selektoren in XPath konvertiert, da CSS-Selektoren in der Regel viel einfacher zu lesen und zu schreiben sind als XPath-Abfragen. In diesem Fall könnten Sie zum Beispiel den Selektor div.Test um genau das gleiche Ergebnis zu erzielen.

Einige Bibliotheken, die ich finden konnte:

27voto

Alex Lyman Punkte 15257

Ich stelle dies nur als Antwort zur Verfügung, wie es Tomalak schon vor langer Zeit als Kommentar zu meders Antwort gab

//div[contains(concat(' ', @class, ' '), ' Test ')]

12voto

Bennett McElwee Punkte 23106

XPath hat eine enthält-Token Funktion, speziell entwickelt für diese Situation:

//div[contains-token(@class, 'Test')]

Sie wird nur in der neuesten Version von XPath (3.1) unterstützt, so dass Sie eine aktuelle Implementierung benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X