일부 청크는 동일한 태그로 끝나고 다른 청크는 별도의 태그로 끝나는 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>