如何在带有后缀的XPath 1.0中使用text()?

时间:2015-10-18 20:47:24

标签: xml xpath xmllint

我正在从XHTML中检索所有文本:

//p/text()

工作正常,但它们都是一个接一个地没有任何分隔符。我想在它们之间添加一个空格。我正在尝试:

//p/concat(text(), " ")

没有运气:

XPath error : Invalid expression
//p/concat(text(), " ")
           ^

我正在使用xmllint版本20902

1 个答案:

答案 0 :(得分:3)

XPath实际上是用于选择,而不是操纵。除了选择文本以将其排列为所选项目之间的间距之外,您还可以从单纯的选择到操作。 对于操作,请考虑使用XSLT而不仅仅是XPath。

也就是说,如果你能使用XPath 2.0(通过另一个工具 - xmllint只支持XPath 1.0),你可以通过string-join()将所选字符串连接在一起:

 string-join(//p/text(), ' ')

但请注意,//p/text()会遗漏divspan等文字。也许您的意思是//*/text()//text()?另请注意,即使在XPath 1.0中,您也可以通过string(/)获取所有文本,但这并不能满足您添加空格的需求。