Posso usare un Regex in un’espressione XPath?

Qualcosa come .//div[@id='foo\d+] per catturare i tag div con id='foo123' .

Sto usando .NET, se questo è importante.

Come altre risposte hanno notato, XPath 1.0 non supporta le espressioni regolari .

Tuttavia, hai le seguenti opzioni :

  • Usa un’espressione XPath 1.0 (nota le funzioni starts-with() e translate() ) in questo modo:
 .//div
    [inizia con (@id, 'foo') 
   e 
    'foo' = translate (@id, '0123456789', '')
   e
    lunghezza della stringa (@id)> 3   
    ]
  • Usa EXSLT.NET – c’è un modo per usare le sue funzioni direttamente nelle espressioni XPath senza dover usare XSLT . Le funzioni di estensione EXSLT che consentono a RegEx-es di essere utilizzate sono: regexp:match() , regexp:replace() e regexp:test()

  • Usa XPath 2.0 / XSLT 2.0 e il suo supporto integrato per le espressioni regolari (le funzioni match () , replace () e tokenize () )

XPath 2.0 ha alcune funzioni che supportano le espressioni regolari: matches() , replace() , tokenize() .

In XPath 1.0 non esiste alcun supporto per le espressioni regolari.

Per .NET è ansible 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, il tuo esempio si trasformsrebbe 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 gli Oggetti estensione.

Tutorial qui .

Volevo anche farlo, quindi ho creato il mio modulo xpath di base.