一部のチャンクは同じタグで終わり、他のチャンクは別のタグで終わる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>