类似于.//div[@id='foo\d+]
用id='foo123'
.
如果这很重要,我正在使用.NET。
正如其他答案所指出的,XPath 1.0不支持正则表达式。
尽管如此,您有以下选择:
starts-with()
andtranslate()
函数):.//div [开始于(@id,'foo') 和 'foo' = translate(@id, '0123456789', '') 和 字符串长度(@id)> 3 ]
使用EXSLT.NET - 有一种方法可以直接在 XPath 表达式中使用其函数,而无需使用 XSLT。允许使用 RegEx-es 的 EXSLT 扩展函数是regexp:match()
:regexp:replace()
和regexp:test()
使用 XPath 2.0 / XSLT 2.0及其对正则表达式的内置支持(函数matches()、replace()和tokenize())
XPath 2.0 有一些支持正则表达式的函数:matches()
, replace()
, tokenize()
.
在 XPath 1.0 中没有正则表达式支持。
对于 .NET,您可以使用 Saxon.Net 中的 XPath 引擎来支持 XPath 2.0。
因此,如果在 Saxon.NET 中使用 XPath 2.0 引擎,您的示例将转向:.//div[matches(@id,'foo\d+')]
.
在 .NET 中,您可以通过扩展对象访问您的自定义类(如果您可以根据需要对其进行适当编码,则可以访问正则表达式)。
教程在这里。
我也想这样做,所以创建了我自己的基本xpath 模块。