【问题标题】:How to Use Functions in Xpath 1.0如何在 Xpath 1.0 中使用函数
【发布时间】:2022-01-16 14:34:50
【问题描述】:

我正在使用仅支持 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 中使用它们?

【问题讨论】:

    标签: xml xpath xpath-1.0


    【解决方案1】:

    XPath 1.0

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

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

    concat(xp1, 'string', xp2)
    

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

    XPath 2.0

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

    /e1/concat(e2, 'suffix')
    

    另见

    【讨论】:

    • 非常感谢您的回复。我一直在拉我的头发。如果您所说的是正确的,那么 XPath 1.0 中的 concat() 没有多大用处......是否可以像我尝试做的那样在 XPath 1.0 中组合来自三个兄弟节点的值? (当我在 freeformatter.com/xpath-tester.html...which 中测试它时,我的 xpath 运行良好,我怀疑它使用的是 XPath 2+)
    • 正确,XPath 1.0 没有等效于 XPath 2.0 中的 string-join() 函数,它允许您通过连接来自可变数量节点的值来构造字符串。 XPath 2.0 的发明是有原因的!
    猜你喜欢
    • 2014-03-13
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多