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>

関連情報