根据标签 xml bash 中的属性搜索和 return 标签名称

Search and return tag name based off attribute within the tag xml bash

我有一个包含 "name" 属性的标签。标记 (xsd:tag1) 本身在 XML 文件中 不是 唯一,但名称属性 (name1) 是唯一的。我如何使用 xmlstarlet 或其他方式搜索和 return 标签名称(即 return xsd:tag1)? XML 的示例如下所示。

<doc xmlns:xsd="http://example.com">
   <xsd:parentTag>
      <xsd:tag1 name="name1" />
   </xsd:parentTag>
</doc>

您提供的示例输入有两个问题:

  • <xsd:tag1 name="name1"> 必须关闭
  • 必须定义命名空间前缀 xsd:

如果文件input.xml如下:

<doc xmlns:xsd="http://example.com">
 <xsd:parentTag>
  <xsd:tag1 name="name1" />
 </xsd:parentTag>
</doc>

以下命令

xmlstarlet sel -T -t -m "//*[@name='name1']" -v 'name()' input.xml

产量

xsd:tag1

诀窍是在输入中有一个正确的 xmlns 声明,以避免 xmlstarlet 抱怨未定义的命名空间。