¿Puedo usar un Regex en una expresión XPath?

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

Estoy usando .NET, si eso importa.

Como han notado otras respuestas, XPath 1.0 no admite expresiones regulares .

No obstante, tienes las siguientes opciones :

  • Use una expresión XPath 1.0 (observe las funciones starts-with() y translate() ) así:
 .//div
    [starts-with (@id, 'foo') 
   y 
    'foo' = traducir (@id, '0123456789', '')
   y
    string-length (@id)> 3   
    ]
  • Use EXSLT.NET : hay una forma de usar sus funciones directamente en expresiones XPath sin tener que usar XSLT . Las funciones de extensión EXSLT que permiten el uso de RegEx-es son: regexp:match() , regexp:replace() y regexp:test()

  • Utilice XPath 2.0 / XSLT 2.0 y su soporte incorporado para expresiones regulares (las funciones concuerdan () , replace () y tokenize () )

XPath 2.0 tiene algunas funciones que admiten expresiones regulares: matches() , replace() , tokenize() .

En XPath 1.0 no hay soporte de expresiones regulares.

Para .NET puede usar el motor XPath en Saxon.Net para tener soporte XPath 2.0.

Entonces, si usa el motor XPath 2.0 en Saxon.NET, su ejemplo se convertiría en: .//div[matches(@id,'foo\d+')] .

En .NET tiene la capacidad de acceder a sus clases personalizadas (y, por lo tanto, expresiones regulares si puede codificarlas según sus necesidades) a través de objetos de extensión.

Tutorial aquí .

También quería hacer esto, así que creé mi propio módulo básico xpath .