如何在带有后缀的 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()
会丢失 div
、span
等中的文本。也许您的意思是 //*/text()
或 //text()
?进一步注意,即使在 XPath 1.0 中,您也可以通过 string(/)
获取所有文本,尽管这也不能满足您添加空格的愿望。
这就是我从 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()
会丢失 div
、span
等中的文本。也许您的意思是 //*/text()
或 //text()
?进一步注意,即使在 XPath 1.0 中,您也可以通过 string(/)
获取所有文本,尽管这也不能满足您添加空格的愿望。