如何在 Xpath 1.0 中使用函数

How to Use Functions in Xpath 1.0

我正在使用仅支持 XPath 1.0 的 xmllint --xpath。 我知道 XPath 1.0 支持像 concat() 这样的函数:https://www.w3.org/TR/1999/REC-xpath-19991116/

但是,当我尝试在 XPath 中使用它们以从 xml 文档中提取内容时,出现如下错误:

xmllint --debug --xpath "//*[local-name()='artifactId' and contains(text(),'log4j')]/../concat(groupId/text(),' ',artifactId/text(),' ', version/text())" ~/aax1

XPath error : Invalid expression
//*[local-name()='artifactId' and contains(text(),'log4j')]/../concat(groupId/text(),' ',artifactId/text(),' ', version/text())

xmlXPathEval: evaluation failed
XPath evaluation failure

我正在阅读 XPath 规范。目前尚不清楚如何在 XPath 表达式中使用这些函数(很清楚如何在 XSLT 中使用它们)。是否可以在谓词之外的 XPath 1.0 中使用它们?

XPath 1.0

如您所见,函数可能出现在谓词中。

函数也可以作为顶级表达式出现,这在某些情况下会有所帮助,例如

concat(xp1, 'string', xp2)

其中 xp1xp2 是 XPath 表达式:通常为 concat() 可以接受任意数量的参数,将其转换为字符串并连接在一起。

XPath 2.0

函数可能出现在 XPath 表达式的最后一步:

/e1/concat(e2, 'suffix')

另见

  • How to concatenate XML elements using XPath