xmllint --xpath 로 XML 문서 탐색하기
libxml2
패키지에 포함된 xmllint
를 이용하면 리눅스 커맨드라인에서 XML 문서를 쉽게 탐색할 수 있다.
xmllint 초간단 사용법
설치
apt
$ sudo apt-get install libxml2-utils
yum
$ sudo yum install libxml2
사용
$ xmllint --xpath 'XPath표현식' 파일경로
XPath표현식이 무엇인지 모른다면 아래 내용을 읽어보라.
XPath (XML Path Language)
공식 문서는 조금 복잡하지만 XML 문서에서 필요한 정보를 읽어오는 데는 몇 가지만 알면 된다.
몇 가지 기능
기능 | 표현식 예 |
---|---|
노드 선택 | /root/node/node/node |
노드 바로 선택 | //node |
n번째 노드 선택 | /root/node[n] |
속성 선택 | /root/node/@attribute |
텍스트 읽기 | /root/node/text() |
노드 수 세기 | count(/root/node) |
예제
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous Belgian Waffles with plenty of real maple
syrup</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>Light Belgian waffles covered with strawberries and whipped
cream</description>
<calories>900</calories>
</food>
<food>
<name>Berry-Berry Belgian Waffles</name>
<price>$8.95</price>
<description>Light Belgian waffles covered with an assortment of fresh
berries and whipped cream</description>
<calories>900</calories>
</food>
<!-- 중략 -->
</breakfast_menu>
위 문서는 w3schools.com에 올라와 있는 XML 예제다.(출처) xmllint를 써보기 위해 문서를 다운로드한다.
$ curl http://www.w3schools.com/xml/simple.xml > simple.xml
다음은 이 문서에서 노드와 데이터를 읽기 위한 XPath 표현식이다.
모든 food 태그 선택: /breakfast_menu/food
$ xmllint --xpath '/breakfast_menu/food' simple.xml
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous Belgian Waffles with plenty of real maple
syrup</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
(중략)
첫번째 food 태그 선택: /breakfast_menu/food[1]
$ xmllint --xpath '/breakfast_menu/food[1]' simple.xml
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous Belgian Waffles with plenty of real maple
syrup</description>
<calories>650</calories>
</food>
첫번째 food/price 태그의 텍스트 읽기: /breakfast_menu/food[1]/price/text()
$ xmllint --xpath '/breakfast_menu/food[1]/price/text()' simple.xml
5.95$
food 태그가 몇 개인지 세기: count(/breakfast_menu/food)
$ xmllint --xpath 'count(/breakfast_menu/food)' simple.xml
5