在标签xml bash中基于属性搜索和返回标签名称

时间:2019-08-06 14:11:32

标签: xml bash terminal xmlstarlet xmllint

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

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

1 个答案:

答案 0 :(得分:1)

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

  • <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抱怨未定义的名称空间。