我可以在XPathexpression式中使用正则expression式吗?
类似.//div[@id='foo\d+]
来捕获id='foo123'
div标签。
如果有问题,我正在使用.NET。
正如其他答案所指出的那样, XPath 1.0不支持正则expression式 。
尽pipe如此,您有以下select :
- 使用XPath 1.0expression式 (注意
starts-with()
和translate()
函数)如下所示:
.//div [开始(@id,'foo') 和 'foo'=翻译(@id,'0123456789','') 和 string长度(@id)> 3 ]
-
使用EXSLT.NET – 可以直接在XPathexpression式中使用它的函数,而无需使用XSLT 。 允许RegEx-es使用的EXSLT扩展函数是:
regexp:match()
,regexp:replace()
和regexp:test()
-
使用 XPath 2.0 / XSLT 2.0及其对正则expression式的内置支持 (函数匹配() , replace()和tokenize() )
XPath 2.0有一些支持正则expression式的函数: matches()
, replace()
, tokenize()
。
在XPath 1.0中没有正则expression式的支持。
对于.NET,您可以使用Saxon.Net中的XPath引擎来支持XPath 2.0。
因此,如果在Saxon.NET中使用XPath 2.0引擎,您的示例将转到: .//div[matches(@id,'foo\d+')]
。
在.NET中,您可以通过扩展对象访问您的自定义类(因此,如果您可以根据自己的需要对其进行正确编写,则为正则expression式)。
这里的教程。
我也想这样做,所以创build了我自己的基本xpath模块 。