【问题标题】:Is it possible to combine two attribute value with one xpath query?是否可以将两个属性值与一个 xpath 查询结合起来?
【发布时间】:2021-09-16 00:29:48
【问题描述】:

示例 xml

<Resources>
    <Resource>
        <UID>14</UID>
        <Name>Entertainment</Name>
        <ID>2</ID>
    </Resource>
    <Resource>
        <UID>12</UID>
        <Name>Movie</Name>
        <ID>1</ID>
    </Resource>
</Resources>

预期输出:

14,Entertainment
12,Movie

【问题讨论】:

  • 对于 XPath 查询,最好指定 XPath 版本。如果没有另外指定,我们倾向于假设 1.0,部分原因是如果您有 XPath 2.0+,这将非常容易,您不会问这个问题...
  • 我正在使用我相信有 xpath 1.0 版本的 Micro focus 操作编排工具。

标签: xml xpath xquery


【解决方案1】:

在 XQuery 中:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";

declare option output:method 'text';
declare option output:item-separator '&#10;';

/Resources/Resource/string-join((UID, Name), ',')

【讨论】:

    【解决方案2】:

    可以在单个 Xpath 1.0 表达式上完成

    concat(concat(//Resource[1]/UID/text(), ",", //Resource[1]/Name/text()), " ", concat(//Resource[2]/UID/text(), ",", //Resource[2]/Name/text()))
    

    是什么形式

     concat(concat(elem1, "," elem2), " ",concat(elem3, "," elem4))
    

    命令行测试

     xmllint --xpath 'concat(concat(//Resource[1]/UID/text(), ",", //Resource[1]/Name/text()), " ", concat(//Resource[2]/UID/text(), ",", //Resource[2]/Name/text()))' tmp.xml ; echo
    

    结果:

    14,Entertainment 12,Movie 
    

    【讨论】:

    • 当然,这只有在您的输入中恰好有 2 个 Resource 元素时才有效。对于 Resource 元素的数量不可预测的一般情况,我认为它不能在 XPath 1.0 中完成 - 它需要 XPath 2.0(或 XQuery)
    • 是的。我刚刚分享了 xml 格式的示例。元素编号不标准。有时我们得到 200 个元素,有时是 500 个。有没有一种简单的方法可以查询 x 个元素?
    • XPath 1.0 中无法将可变数量的字符串连接成一个字符串。
    • 我们如何使用xquery来实现?这可以在sql中完成吗?
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多