2017-07-26 4 views
2

enthält Ich habe Elemente, die diese aussehenXpath: mit Klasse Finden Element, das also Räume

<li class="attribute "></li> # note the space 
<li class="attribute"></li> 

die XPath //li[@class="attribute"] wird das zweite Element erhalten, aber nicht die erste. Wie kann ich beide Elemente mit demselben xpath erhalten?

+0

Ich glaube, das Problem ist, ähnlich dem, was hier beschrieben wird: https://stackoverflow.com/questions/5925567/xpath-with-regex-match-on-an-attribute-value –

+0

Übereinstimmungen scheint dieses Problem zu lösen. Allerdings brauche ich wirklich eine Lösung für xpath 1.0. – Jonathan

+0

Zum Vergleich, ähnliche Frage: https://StackOverflow.com/Questions/25496151/xpat-to-Match-Space-separated-Attribute-Values ​​ – Jonathan

Antwort

2

Diese XPath 1.0 Expression

//li[contains(concat(' ', normalize-space(@class), ' '), 
       ' attribute ')] 

werden alle Elemente mit liclass Attribute auszuwählen, die die attribute Zeichenkette enthalten, und zwar unabhängig davon, ob es Räume hat Vorder- oder Hinter.


Wenn Sie nur attribute mit möglichst übereinstimmen soll führende und nachfolgende Leerzeichen nur (keine anderen String-Werte), nur verwenden normalize-space():

//li[normalize-space(@class) = 'attribute'] 
+1

GOLD! Danke vielmals. – Jonathan

+0

Der erste Ausdruck könnte auch dazu vereinfacht werden: '// li [contains (concat ('', normalize-space (@class)), 'Attribut')]' – Jonathan

+1

@ Jonathan: Der erste XPath soll wirklich zusammenpassen alle folgenden Fälle: "Attribut", Attribut,, Attribut "zweites", "ein Attribut zwei" usw., aber nicht "AttributXYZ". – kjhughes

Verwandte Themen