2017-05-19 3 views
1
cover: $main//*[has-class("aligncenter wp-image-121146 size-large")]//img 
    cover: $main//img[has-class("aligncenter wp-image-121146 size-large")] 

die Saite hat einen statischen Teil Aligncenter wp-image- und einen dynamischen Teil „“, was ich will, hier zu tun ist, um alle posibles verketten „Wie kann ich eine Wildcard auf Xpath

in bash ist wie folgt somthing:

"aligncenter wp-image-"* 

Wie kann ich das machen in Xpath?

+0

Sie müssen sagen, welche Version von XPath. In XPath 2.0 (oder 3.0 oder 3.1) können Sie die Funktion 'matches()' mit einem regulären Ausdruck verwenden. In 1.0 hast du nur 'starts-with()' und 'contains()' -Funktionen. –

Antwort

0

ich denke, das funktioniert:

'//E[@class="aligncenter" and contains(concat(" ", @class, "wp-image-"), " C ")]' 

Dies könnte robuster sein, haben nicht viel and versucht, und es sieht aus wie Sie die Klassen erwar in dieser Reihenfolge sein:

'//E[contains(concat(" ", @class, "aligncenter wp-image-"), " C ")]' 

ich es nicht, obwohl getestet haben, so oder so, dies sollte Ihnen helfen:

https://gist.github.com/glenpierce/400d5b569094b902f06789d80757454e

0

Es gibt nicht genügend Informationen, um eine exakte XPath-Lösung für diese Frage zu liefern, da Sie keine Beispiel-XML/HTML bereitgestellt haben und beide versuchten XPath-Ausdrücke ungültig sind (wenn sie tatsächlich vorhanden sind).

Um den Titel zu beantworten, können Sie nicht wie in XPath 1.0, das die am weitesten verbreitete Version von XPath ist, Wildcalrd verwenden. Aber Sie können oder starts-with() Funktion verwenden. Letzteres scheint in diesem speziellen Fall besser geeignet zu sein. Zum Beispiel gibt die folgenden XPath alle img Elemente, anyhwere in dem Dokument, in dem class Attributwert beginnt mit Teilzeichenfolge 'Aligncenter wp-image-':

//img[starts-with(@class, 'aligncenter wp-image-')] 

demo

Verwandte Themen