XML에서 값 추출

XML에서 값 추출

나는 이 XML을 가지고 있습니다 :

<results><testsuites><testcase name="XXXX (XXXXX)" time="20.3817"><result>success</result></testcase><total_time value="20.3830" /></testsuites></results>

20.3817을 추출하고 싶습니다.

sed를 시도했지만 제대로 작동하지 못했습니다.

답변1

XML을 구문 분석하는 데 정규식을 사용하지 마세요. 다음과 같은 XML 인식 도구를 사용하십시오 xmllint.

xmllint --xpath 'string(/results/testsuites/testcase/@time)' file.xml

답변2

그리고XML 스타:

$ xmlstarlet sel -t -v '//testcase/@time' -nl data.xml
20.3817

답변3

lxprintf를 사용하세요:

lxprintf -e "%s\n" total_time/@value test.xml

답변4

XML을 지원하는 도구를 사용하는 것이 훨씬 좋습니다.

이것이 실제로 속성 값을 추출하는 간단한 경우라면 를 time사용할 수 있습니다 sed. 여기의 대부분의 답변에서 볼 수 있듯이 실제로 XML을 이해하는 도구를 사용하는 것이 더 나은 접근 방식이지만 매우 간단한 경우에는탈출할 수도 있다사용 sed.

xml='<results><testsuites><testcase name="XXXX (XXXXX)" time="20.3817"><result>success</result></testcase><total_time value="20.3830" /></testsuites></results>'
echo "$xml" | sed -nr 's/.* time="([0-9.]+).*/\1/p'    # GNU
28.3817
echo "$xml" | sed -n 's/.* time="\([0-9.]*\).*/\1/p'   # Non-GNU
28.3817

또는grep

echo "$xml" | grep -Po '(?<=time=")([0-9.]+)'          # GNU
20.3817

하지만나는 여전히 XML을 인식하는 것을 선호합니다.xmlstarlet, 이는 time의 속성으로 식별될 수 있습니다 <testcase>.

관련 정보