【问题标题】:Can I use a Regex in an XPath expression?我可以在 XPath 表达式中使用正则表达式吗?
【发布时间】:2010-09-29 03:16:54
【问题描述】:

.//div[@id='foo\d+] 之类的东西用id='foo123' 捕获 div 标签。

我正在使用 .NET,如果这很重要的话。

【问题讨论】:

    标签: .net xml regex xpath


    【解决方案1】:

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

    不过,您有以下选择:

    .//div [开始于(@id,'foo') 和 'foo' = translate(@id, '0123456789', '') 和 字符串长度(@id)> 3 ]

    【讨论】:

    • @DimitreNovaatchev 我不会一直打扰你,但有时我会。 :) 我正在阅读 - w3.org/TR/xpath/#function-last 和 msdn.microsoft.com/en-us/library/ms256233.aspx 。
    • @Priti,请参阅此资源:stackoverflow.com/questions/339930/…
    • @Priti,在此处查看“任何好的 XSLT 教程/书籍/博客/网站?[关闭]”问题的所有答案:dropbox.com/sh/ovm14omsazrljou/o871HjX0gl
    • @DimitreNovaatchev 我开始阅读 - XPath: Navigating XML with XPath 1.0 and 2.0 Kick Start,作者 Steven Holzner。
    • @priti,我明白,并感谢您的高度赞赏。尽管我很想让自己成为一个帮手,但如果我为你这样做,那么我将不得不为其他所有人做同样的事情......相信我,如果我能把自己分成一千个 Dimitres ,我很乐意这样做并为大家服务。可悲的是,我们生活在 21 世纪。
    【解决方案2】:

    我也想这样做,所以创建了我自己的基本xpath module。

    【讨论】:

    • 链接已损坏,因此我对其进行了更新。链接到站外页面时,请总结重要信息,以便在链接失效时,链接页面的要点仍然可用。链接断开时,仅链接的答案没有用。
    【解决方案3】:

    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+')]。

    【讨论】:

      【解决方案4】:

      在 .NET 中,您可以通过扩展对象访问您的自定义类(如果您可以根据需要对其进行适当编码,则可以访问正则表达式)。

      教程here.

      【讨论】:

      • 链接已损坏。链接到站外页面时,请总结重要信息,以便在链接失效时,链接页面的要点仍然可用。
      猜你喜欢
      • 2015-03-08
      • 2013-05-23
      • 2020-11-21
      • 1970-01-01
      • 2011-02-06
      • 2021-06-20
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多