XPath:如何在 text() 节点上执行字符串、子字符串或其他函数时获取多个字符串

XPath: How to grab multiple strings when doing a string, substring, or another function on text() nodes

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

示例代码:

1
2
3
4
5
6
        <p>
        Monday 2/4/13
        </p>
        <p>
        Tuesday 2/5/13
        </p>

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

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


在 XPath 2.0 中,您可以直接在 text():

中使用该函数

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

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

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

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

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