쉘 스크립트 - xml의 태그 사이에서 값 가져오기

쉘 스크립트 - xml의 태그 사이에서 값 가져오기

내 XML 파일의 형식은 다음과 같습니다. <fullName>..</fullName>ABC와 DEF 태그 사이의 값을 얻고 싶습니다 . fullName다른 변수에서 각 xml 태그의 값을 가져와야 하기 때문에 각 행에 도달하기 위해 while 루프에서 이 코드를 작성하고 있습니다 . grep모든 값이 함께 표시됩니다.

감사해요

<fields>
    <fullName>ABC</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>TY</type>
</fields>

<fields>
    <fullName>DEF</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>XY</type>
</fields>

답변1

다음과 같은 XML 파서를 사용하십시오.xmlstarlet:

xmlstarlet sel -t -m '//fields' -v 'fullName' -n file

파일 은 xml유효해야 하지만 루트 태그가 없기 때문에 예제에서는 작동하지 않습니다. 위 명령과 함께 다음이 사용됩니다.

<root>
<fields>
    <fullName>ABC</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>TY</type>
</fields>

<fields>
    <fullName>DEF</fullName>
    <trackFeedHistory>false</trackFeedHistory>
    <type>XY</type>
</fields>
</root>

산출:

ABC
DEF

@roaimas 님의 댓글 덕분에 필드 개수를 모르고 for루프를 생성했는데 결과는 다음과 같습니다.xmlstarlet

numFields=$(xmlstarlet sel -t -m '//fields' -o "." file | wc -c)
for i in $(seq 1 $numFields); do
    var=$(xmlstarlet sel -t -m "//fields[$i]" -v "fullName" file)
    printf '%s\n' "$var" # or do something else
done

관련 정보