我能在XPath表达式中使用正则表达式吗?

62

如何用类似.//div[@id='foo\d+]的语法匹配具有id='foo123'属性的

标签。

我正在使用.NET,如果这有影响的话。

4个回答

95

正如其他答案所指出的那样,XPath 1.0不支持正则表达式。

尽管如此,您有以下选项:

.//div
   [starts-with(@id, 'foo') 
  and 
   'foo' = translate(@id, '0123456789', '')
  and
   string-length(@id) > 3   
   ]

@DimitreNovatchev 我不会总是打扰你,但有时我会。 :) 我正在阅读 - http://www.w3.org/TR/xpath/#function-last 和 http://msdn.microsoft.com/en-us/library/ms256233.aspx 。 - Arup Rakshit
@Priti,这里是相关资源链接:http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online/341589#341589 - Dimitre Novatchev
@Priti,请在此处查看对问题“有没有好的XSLT教程/书籍/博客/网站?[已关闭]”的所有答案:https://www.dropbox.com/sh/ovm14omsazrljou/o871HjX0gl - Dimitre Novatchev
@DimitreNovatchev 我开始阅读《XPath: Navigating XML with XPath 1.0 and 2.0 Kick Start,By Steven Holzner》。 - Arup Rakshit
1
@priti,我理解你的感激之情,非常感谢。虽然我很想作为一个帮手为你提供帮助,但如果我这样做了,那么我也会被迫为其他每个人提供同样的帮助......相信我,如果我能把自己分成一千个Dimitre,我会很乐意这样做并为每个人服务。可惜,我们生活在21世纪。 - Dimitre Novatchev
显示剩余6条评论

28
XPath 2.0 拥有一些支持正则表达式的函数:matches()replace()tokenize()
XPath 1.0 不支持正则表达式。
如果使用 Saxon.Net 中的 XPath 引擎,则可以在 .NET 中使用 XPath 2.0。
因此,如果在 Saxon.NET 中使用 XPath 2.0 引擎,您的示例将变为:.//div[matches(@id,'foo\d+')]

2
在.NET中,你可以通过扩展对象来访问自定义类(因此如果你能针对你的需求编写适当的代码,也可以访问正则表达式)。
教程在这里

链接已经失效。当链接到一个外部页面时,请总结重要信息,以便在链接失效时仍然可以获取链接页面的主要内容。 - the Tin Man

0

我也想做这个,所以我创建了自己的基本xpath模块


1
链接已经失效,所以我更新了它。当链接到一个外部页面时,请总结重要信息,以便在链接失效时仍然可以获得链接页面的主要内容。仅有链接而没有其他信息是没有意义的,一旦链接失效就无法访问。 - the Tin Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接