检索具有特定属性名称的所有 xml 元素的节点名称

发布于 2025-01-09 10:37:21 字数 749 浏览 0 评论 0原文

我有一个 xml,我们称之为 example.xml,如下所示:

<a>
  <b ref="lala">text of node b
  </b>
  <c ref="hihi">text of node c
  </c>
  <d somethingelse="foo">text of the node d
  </d>
</a>

我想获取所有具有名为“ref”属性的节点的名称

因此我的输出将是:

b
c

我已经尝试过: xmlstarlet sel -t -v "name(//*[@ref])" example.xml 但我只得到第一个节点的名称作为输出,即 b。获取所有节点名称的命令中缺少什么?

注意:我在 debian bulleyes 上运行,这是我的 xmlstarlet 版本:

xmlstarlet --version
1.6.1
compiled against libxml2 2.9.10, linked with 20910
compiled against libxslt 1.1.34, linked with 10134

I have an xml, let's call it example.xml that looks like this:

<a>
  <b ref="lala">text of node b
  </b>
  <c ref="hihi">text of node c
  </c>
  <d somethingelse="foo">text of the node d
  </d>
</a>

I want to get the names of all the nodes that have an attribute called "ref"

so my output would be:

b
c

I have tried:
xmlstarlet sel -t -v "name(//*[@ref])" example.xml
but I only get the name of the first node as an output i.e., b. What is missing in my command to get all the node names?

Note: I run on debian bulleyes and here is my xmlstarlet version:

xmlstarlet --version
1.6.1
compiled against libxml2 2.9.10, linked with 20910
compiled against libxslt 1.1.34, linked with 10134

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

太阳男子 2025-01-16 10:37:21

发现一些似乎有效的东西:

xmlstarlet sel -t -m "//*[@ref]" -v "name()" -n example.xml

-n 是在不同行上给出输出的标签。

可能是版本问题(不确定)。无论如何,这篇关于 xmlstarlet 的唯一输出与多个输出的文章给了我一些帮助:

为什么 xmlstarlet 不选择所有节点?

Found something that seems to work:

xmlstarlet sel -t -m "//*[@ref]" -v "name()" -n example.xml

The -n is the tag to give the output on different lines.

It might have been a problem of version (not sure). Anyway this post about unique vs multiple output with xmlstarlet gave me some help:

Why doesn't xmlstarlet select all nodes?

月下凄凉 2025-01-16 10:37:21

尝试使用此方法来获取具有 "ref" 属性的节点名称

//*[@ref]/name()

Try this one to get names of nodes with "ref" attribute:

//*[@ref]/name()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文