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>

관련 정보