파이썬에서 xml parsing 하는 방법은 매우 다양하죠.


어떤 라이브러리를 쓰느냐에 따라서, 코딩 내용도 조금은 달라질 것이구요.


이번 포스팅에서는 ElementTree 라이브러리를 이용해서 xml parsing 하는 방법에 대해서 간략하게 작성해보려구요.


1. ElementTree 라이브러리 설치


일단 ElementTree가 설치되어 있어야 하겠죠? 저는 pip를 이용한 설치를 추천드립니다.


혹시 pip를 설치가 되어 있지 않다면, apt-get install python-pip 로 설치하세요 (물론 root 권한에서요)


ElementTree 설치는 아래와 같아요.

root 권한에서 


pip install elementtree


2. XML 파싱


ElementTree 라이브러리를 설치했으니, 모듈을 불러와야죠. 


python 소스 코드에서 여러 방법으로 모듈을 불러올 수 있지만, 저는 주로 아래와 같이 사용합니다.


#python xml library import 

from elementtree.ElementTree import Element, ElementTree, SubElement, dump, parse, tostring


파싱에 앞서서 XML이 어떻게 생겼는지 알아야, 소스를 작성할 수 있으니깐요. 

간단한 XML을 아래와 같이 가정하겠습니다.


<?xml version="1.0" encoding="UTF-8"?>

<test>

  <song>

     <title>a</title>

     <length>4:54</length>

  </song>

  <song>

     <title>b</title>

     <length>3:21</length>

  </song>

</test>


위 XML은 "/var/www/html/test.xml" 에 위치하고 있다고 하구요.

이제 파싱을 해보겠습니다.


      targetXML = open("/var/www/html/test.xml",'r')

      tree = parse(targetXML)

      root = tree.getroot()


      for element in root.findall("song"):

        print element.findtext("title")

        print element.findtext("length")


간단하게 설명해보면 다음과 같죠.


위 3줄은 간단하니깐요. 넘어가구요. 하나만요. parse는 우리가 elementtree를 import 할 때 적어줬기 때문에 사용가능한 것이죠.


아래 3줄에서는 먼저 for문에서 root.findall("song")으로 song 엘리먼트를 모두 찾고, 이것에 대해서 반복하는 문장이되겠습니다.


print 문장에서 사용된 element.findtext("title")은 title 엘리먼트가 가지고 있는 text를 반환해주고요.


즉 실행해보면 다음과 같은 결과가 나옵니다.


a

4:54

b

3:21


  3. 전체소스 


  1   #python xml

  2   from elementtree.ElementTree import Element, ElementTree, SubElement, dump, parse, tostring

  3   # ===================================================================================

  4 

  5   targetXML = open("/var/www/html/test.xml",'r')

  6   tree = parse(targetXML)

  7   root = tree.getroot()

  8 

  9   for element in root.findall("song"):

 10     print element.findtext("title")

 11     print element.findtext("length")



XML 생성관련 포스팅은 다음을 참고해주세요~~~


http://ngee.tistory.com/317

+ Recent posts