【问题标题】:How do I bind nodes to variables in xpath?如何将节点绑定到 xpath 中的变量?
【发布时间】:2017-08-30 17:12:25
【问题描述】:

我想在 XML 中沿找到的路径查找(绑定)所有节点。 考虑以下 XML sn-p。

<a at="dat1">
    <b at="dat2">
        <c at="dat3">blah</c>
        <c at="dat4">blah</c>
    </b>
    <b at="dat5">
        <c at="dat6">blah</c>
        <c at="dat7">blah</c>
    </b>
</a>
<a at="dat8">
    <b at="dat2">
        <c at="dat4">blah</c>
        <c at="dat9">blah</c>
    </b>
    <b at="dat10">
        <c at="dat9">blah</c>
        <c at="dat4">blah</c>
    </b>
</a>

xpath 查询 /a/b[@at="dat2"]/c[@at="dat4"] 将只返回两个 c 节点。但是,我想检索满足给定条件的路径(a、b 和 c)上的所有节点。在这种情况下,我期待两个三元组的 a、b、c 节点。 xpath 表达式可以任意复杂。 xpath 引擎会找到三元组,但只返回 c 节点。

我当然可以编写多个 xpath 表达式来获取每个元素。但这将需要 xpath 引擎进行多次搜索,这并不是必需的,因为它已经在第一次搜索中找到了所有绑定。

如何在 xpath 中实现这一点?如果不可能,我应该使用哪种 XML 查询语言?

【问题讨论】:

  • 到目前为止你做了什么?你至少用谷歌搜索过吗?
  • @Reborn 在发布问题之前我做了谷歌,但没有找到解决方案。我意识到这个问题不够清楚,因此我对其进行了编辑。希望对您有所帮助。

标签: xml xpath


【解决方案1】:

使用XPath axisancestor-or-self。它...

选择当前节点的所有祖先(父、祖父等)和当前节点本身

所以/a/b/c/ancestor-or-self::* 将选择所有三个节点。

【讨论】:

    【解决方案2】:

    在 XPath 下试试

    /a/descendant-or-self::*
    

    它应该返回a 元素以及bc

    如果a 的后代比bc 多,您可以在下面使用:

    //a/descendant-or-self::*[name()=('a', 'b', 'c')]
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      相关资源
      最近更新 更多