2013-08-03 26 views
2

我想使用XPath通过文本()函数的XPath:如何做一个字符串,字符串,或文本(),另一种功能时抢多串节点

示例代码获取修改字符串列表:

<div> 
     <p> 
     Monday 2/4/13 
     </p> 
     <p> 
     Tuesday 2/5/13 
     </p> 
</div> 
在这个例子中

现在,如果我想抢

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

回答

2

的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(), ' ')) 
+0

这是一个XPath 2.0修改?此方法不起作用。我曾尝试并重新使用Firefox的Firepath和XPath Checker插件。 – Rich

+0

是的,那是XPath 2.0。我更新了答案,希望现在更清楚。查看[此演示](http://goo.gl/muNSeS)以查看它如何与XPath 2.0协同工作。 – acdcjunior

+1

请注意,在XPath 1.0中不可能完成它,因为它在数据模型/类型系统中没有“字符串序列”的概念。 –

相关问题