【问题标题】:XPath: How to grab multiple strings when doing a string, substring, or another function on text() nodesXPath:如何在 text() 节点上执行字符串、子字符串或其他函数时获取多个字符串
【发布时间】:2013-08-03 13:14:36
【问题描述】:

我想使用 XPath 通过 text() 函数获取修改后的字符串列表

示例代码:

 <div>
        <p>
        Monday 2/4/13
        </p>
        <p>
        Tuesday 2/5/13
        </p>
 </div>

现在在这个例子中,如果我想在

标记,我会写一个表达式,例如 .//div/p/text()。但是,如果我只想抓取日期,我可以使用 substring-after 函数,但代码 substring-after(.//div/p/text(), ' ') 只抓取一个元素。我如何编写这个表达式来获取所有文本元素?

【问题讨论】:

    标签: xpath


    【解决方案1】:

    XPath 2.0中,可以直接在text()中使用函数:

    //div/p/substring-after(text(), ' ')
    


    XPath 1.0 中,仅使用一个表达式无法实现,因为:

    • substring-after() 函数将 string 作为第一个参数,而不是 node-set
    • 不能将函数指定为定位步骤(如上面的 2.0 示例所做的那样)。

    因此,在 1.0 中,您最好的选择是(您必须为每个节点重复 - 请注意它只返回一个字符串):

    concat(substring-after(//div/p[1]/text(), ' '),
           ' ',
           substring-after(//div/p[2]/text(), ' '))
    

    【讨论】:

    • 这是对 XPath 2.0 的修改吗?这种方法行不通。我已经尝试并重试了使用 Firefox 的 Firepath 和 XPath Checker 插件的这种方法。
    • 是的,那是 XPath 2.0。我更新了答案,希望现在更清楚。检查this demo 以了解它如何与 XPath 2.0 一起使用。
    • 请注意,在 XPath 1.0 中不可能做到这一点,因为它的数据模型/类型系统中没有“字符串序列”的概念。
    • 这很有帮助并澄清了我的困惑。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多