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

Retrieving the node names of all the xml elements with specific attribute name

我有一个 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>

我想获取 所有 节点的 names 具有名为“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

试试这个 获取具有 "ref" 属性的节点的名称:

//*[@ref]/name()

找到似乎有效的东西:

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

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

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

Why doesn't xmlstarlet select all nodes?