给定一个 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>