Posso usar um Regex em uma expressão XPath?
Pergunta
Algo como .//div[@id='foo\d+]
a tags captura div com id='foo123'
.
Eu estou usando .NET, se o que importa.
Solução
Como outras respostas têm notado, XPath 1.0 não suporta expressões regulares .
No entanto, você tem as seguintes opções :
- Use um 1.0 expressão XPath (note a < strong>
starts-with()
etranslate()
funções) como este:
.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
-
Use EXSLT.NET - não há uma maneira de uso suas funções diretamente em expressões XPath sem ter que usar XSLT . As funções de extensão EXSLT que permitem RegEx-es a serem utilizados são:
regexp:match()
,regexp:replace()
eregexp:test()
-
Use XPath 2.0 / XSLT 2.0 e sua suporte embutido para expressões regulares (as funções jogos () , replace () e tokenize () )
Outras dicas
XPath 2.0 tem algumas funções que suportam expressões regulares: matches()
, replace()
, tokenize()
Em XPath 1.0 não há suporte regex.
Para .NET, você pode utilizar o motor de XPath em Saxon.Net ter o apoio XPath 2.0.
Assim, se utilizar o motor de XPath 2.0 em Saxon.NET, o seu exemplo se transformaria em:. .//div[matches(@id,'foo\d+')]
Em .NET você tem a capacidade de acessar suas classes personalizadas (e, portanto, regex se você pode codificá-lo de forma adequada para as suas necessidades), através de objectos de extensão.
aqui .
Eu também queria fazer isso para criei minha própria básica xpath módulo .