![从 XML 中提取具有不同结束标签的块(...与)](https://linux22.com/image/218042/%E4%BB%8E%20XML%20%E4%B8%AD%E6%8F%90%E5%8F%96%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E7%BB%93%E6%9D%9F%E6%A0%87%E7%AD%BE%E7%9A%84%E5%9D%97%EF%BC%88...%E4%B8%8E%EF%BC%89.png)
给定一个 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>