从 XML 中提取具有不同结束标签的块(...与)

从 XML 中提取具有不同结束标签的块(...与)

给定一个 XML,其中一些块以同一标记结尾,而其他块则以单独的标记结尾:

<parent name="parent_1" team="team_a">
  <child name="child_1" team="team_b"/>
</parent>
<parent name="parent_2" team="team_c"/>
<parent name="parent_3" team="team_b"/>

如何提取给定名称的块?

我有:

awk "/<parent name=\"$name\"/,/<\/parent>/" $file 

这适用于 $name=parent_1,并且:

awk "/<parent name=\"$name\"/,/\/>/" $file 

这适用于parent_2或parent_3,但不确定如何同时执行这两个操作。

我试过:

awk "/<parent name=\"$name\"/,/[\/>|<\/parent>]/" $file 

作为 OR 条件,但对于 Parent_1 它仍然给我:

    <parent name="parent_1" team="team_a">

可以吗?

答案1

使用适当的xml解析器xmllint::

文件:

<root>
<parent name="parent_1" team="team_a">
  <child name="child_1" team="team_b"/>
</parent>
<parent name="parent_2" team="team_c"/>
<parent name="parent_3" team="team_b"/>
</root>
$ xmllint --xpath '//parent[@name="parent_1"]' file
<parent name="parent_1" team="team_a">
  <child name="child_1" team="team_b"/>
</parent>

相关内容