Posso usar um Regex em uma expressão XPath?

Algo como .//div[@id='foo\d+] para capturar tags div com id='foo123' .

Estou usando o .NET, se isso importa.

Como outras respostas notaram, o XPath 1.0 não suporta expressões regulares .

No entanto, você tem as seguintes opções :

  • Use uma expressão XPath 1.0 (observe as funções starts-with() e translate() ) desta forma:
 .//div
    [começa com (@id, 'foo') 
   e 
    'foo' = translate (@id, '0123456789', '')
   e
    comprimento de cadeia (@id)> 3   
    ]
  • Use EXSLT.NET – existe uma maneira de usar suas funções diretamente em expressões XPath sem ter que usar XSLT . As funções de extensão EXSLT que permitem que os RegEx-es sejam usados ​​são: regexp:match() , regexp:replace() e regexp:test()

  • Use XPath 2.0 / XSLT 2.0 e seu suporte embutido para expressões regulares (as funções matches () , replace () e tokenize () )

O XPath 2.0 possui algumas funções que suportam expressões regulares: matches() , replace() , tokenize() .

No XPath 1.0 não há suporte para regex.

Para .NET, você pode usar o mecanismo XPath no Saxon.Net para ter suporte ao XPath 2.0.

Portanto, se estiver usando o mecanismo XPath 2.0 no Saxon.NET, seu exemplo será: .//div[matches(@id,'foo\d+')] .

No .NET você tem a capacidade de acessar suas classs personalizadas (e, portanto, regex, se você pode codificá-lo adequadamente para suas necessidades) através de objects de extensão.

Tutorial aqui .

Eu também queria fazer isso, então criei meu próprio módulo xpath básico.