Posso usare un Regex in un'espressione XPath?
Domanda
Qualcosa come .//div[@id='foo\d+]
per acquisire tag div con id = 'foo123'
.
Sto usando .NET, se questo è importante.
Soluzione
Come notato da altre risposte, XPath 1.0 non supporta le espressioni regolari .
Tuttavia, hai le seguenti opzioni :
- Usa un'espressione XPath 1.0 (nota < strong>
inizia-con ()
etranslate ()
) in questo modo:
.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
Usa EXSLT.NET : esiste un modo per utilizzare funziona direttamente nelle espressioni XPath senza usare XSLT . Le funzioni di estensione EXSLT che consentono l'utilizzo di RegEx-es sono:
regexp : match ()
, < code> regexp: replace () e < strong>regexp: test ()
Usa XPath 2.0 / XSLT 2.0 e i suoi supporto integrato per le espressioni regolari (le funzioni match () , sostituisci () e tokenize () )
Altri suggerimenti
XPath 2.0 ha alcune funzioni che supportano le espressioni regolari: match ()
, replace ()
, tokenize ()
.
In XPath 1.0 non esiste il supporto regex.
Per .NET è possibile utilizzare il motore XPath in Saxon.Net per avere il supporto XPath 2.0.
Quindi, se si utilizza il motore XPath 2.0 in Saxon.NET, l'esempio si trasformerebbe in: .//div[matches(@id,'foo\d+ ')]
.
In .NET hai la possibilità di accedere alle tue classi personalizzate (e quindi regex se puoi codificarlo in modo appropriato per le tue esigenze) tramite Extension Objects.
Tutorial qui .
Volevo anche farlo, quindi ho creato il mio modulo xpath .