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

How to use text() in XPath 1.0 with a suffix?

这就是我从 XHTML 中检索所有文本的方法:

//p/text()

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

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

运气不好:

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

我使用的是 xmllint 版本 20902

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(/) 获取所有文本,尽管这也不能满足您添加空格的愿望。