Kann ich einen Regex in einem XPath-Ausdruck verwenden?
Frage
So etwas wie .//div[@id='foo\d+]
zu erfassen div-Tags mit id='foo123'
.
Ich bin mit .NET, wenn es ankommt.
Lösung
Wie andere Antworten festgestellt haben, XPath 1.0 unterstützt keine reguläre Ausdrücke .
Trotzdem haben Sie folgende Optionen :
- Verwenden Sie einen XPath 1.0 Ausdruck (beachten Sie den < strong>
starts-with()
undtranslate()
Funktionen) wie folgt aus:
.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
-
Verwenden Sie EXSLT.NET - es gibt einen Weg zu Verwendung Funktionen direkt in XPath-Ausdrücken ohne XSLT verwenden . Die EXSLT Erweiterungsfunktionen, die RegEx-es ermöglichen, verwendet werden sollen:
regexp:match()
,regexp:replace()
undregexp:test()
-
XPath 2.0 / XSLT 2.0 und seine eingebaute Unterstützung für reguläre Ausdrücke (die Funktionen matches () , ersetzen () und tokenize () )
Andere Tipps
XPath 2.0 hat einige Funktionen, die reguläre Ausdrücke unterstützen. matches()
, replace()
, tokenize()
In XPath 1.0 gibt es keine regex Unterstützung.
Für .NET können Sie die XPath-Engine in Saxon.Net verwenden, um XPath 2.0-Unterstützung zu haben.
Also, wenn die XPath 2.0-Engine in Saxon.NET verwenden, Ihr Beispiel würde sich an:. .//div[matches(@id,'foo\d+')]
In .NET Sie haben die Möglichkeit, Ihre benutzerdefinierten Klassen zugreifen (und daher regex, wenn Sie es entsprechend für Ihre Bedürfnisse codieren können) über Erweiterungsobjekte.
hier .
Ich wollte auch dies so tun, mein eigenen Grund XPath-Modul .