[xpath] Wie kann ich auf ein Attribut, das eine bestimmte Zeichenfolge enthält, abgleichen?



3 Answers

Die Antwort von mjv ist ein guter Anfang, wird aber fehlschlagen, wenn atag nicht der erste aufgelistete Klassenname ist.

Der übliche Ansatz ist der etwas unhandliche:

//*[contains(concat(' ', @class, ' '), ' atag ')]

Dies funktioniert, solange Klassen nur durch Leerzeichen und nicht durch andere Leerzeichen getrennt sind. Dies ist fast immer der Fall. Wenn es nicht sein könnte, müssen Sie es noch unhandlicher machen:

//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]

(Die Auswahl nach zeichenraumähnlichen zeichenfolgengetrennten Zeichenfolgen ist ein solcher häufiger Fall, dass es überraschend ist, dass es keine spezifische XPath-Funktion dafür gibt, wie CSS3s '[class ~ = "atag"].)

Question

Ich habe ein Problem bei der Auswahl von Knoten nach Attribut, wenn die Attribute mehr als ein Wort enthalten. Beispielsweise:

<div class="atag btag" />

Dies ist mein xpath-Ausdruck:

//*[@class='atag']

Der Ausdruck funktioniert mit

<div class="atag" />

aber nicht für das vorherige Beispiel. Wie kann ich das <div> auswählen?




Sie können Folgendes versuchen

By.CssSelector("div.atag.btag")




Ein 2.0 XPath, der funktioniert:

//*[tokenize(@class,'\s+')='atag']

oder mit einer Variablen:

//*[tokenize(@class,'\s+')=$classname]



probiere das aus: //[contains(@class, 'atag')]




Related



Tags

xpath