gpt4 book ai didi

XPath : Names of all sibling nodes

转载 作者:行者123 更新时间:2023-12-04 05:38:48 25 4
gpt4 key购买 nike

我无法获得 following-sibling轴工作。

我有一个 XML 文档,如下所示。我试过类似 name(/T/p/q/following-sibling::*[1] .我知道 name只会产生集合中的第一个,但是,该表达式不返回任何内容。我正在尝试使用 xmlstarlet 的 XPath Ubuntu 上的命令。

<T>
<p><q>
<a1>A</a1>
<a2>A</a2>
<a3>A</a3>
<a4>A</a4>
<a5><b1>A</b1></a5>
</q></p>
</T>

给定输入为 /T/p/q ,我想要它所有子元素节点的名称,但仅限于该级别。也就是说,输出应该是
a1
a2
a3
a4
a5

最佳答案

事实上,它比你想象的要简单得多。

/T/p/q/*

返回 a1, a2, a3, a4, a5 的节点集.

它选择 q 的所有 child 这是 p 的 child 这是 T 的 child 这是 context node 的 child .

说“ child ”,我的意思是“直系 child ”。不是“后代”。因此,它只会选择 a1-a5 上的节点。等级。

正如你所说, name()函数只返回节点集中第一个节点的名称。我想您必须遍历节点集才能将所有名称作为单个字符串获取。

使用 xmlstarlet , 你可以这样做:
xml sel -t -m "/T/p/q/*" -v "name(.)" -n input.xml

它匹配节点集,调用 name(.)在其中的每个节点上,然后打印一个换行符。
  • -m匹配 XPath 表达式
  • -v打印由 XPath 表达式返回的值
  • -n换行
  • more here


  • 使用 following-sibling轴,您必须处于同一级别,例如选择 a2 的所有以下 sibling ,你会使用 /T/p/q/a2/following-sibling::* .这将返回 a3, a4, a5 .

    关于XPath : Names of all sibling nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188766/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com