Language/Python Python XML 처리
  • 728x90
    반응형

     

     

     

    파이썬으로 XML 처리하기


     

    목차

       

       

      XML 문서 생성하기

      📌 ElementTree를 이용하여 다음과 같은 구조의 XML 문서를 생성해 보자.

       

      <note data="20170725">
          <to>Tove</to>
          <from>Jani</from>
          <headin>Reminder</heading>
          <body>Don't forget me this weekend!</body>
      </note>
       

       

      다음과 같은 소스를 작성한다.

       

       

      위 소스의 실행 결과는 다음과 같다.

      <note><to>Tove</to></note>

       

      엘리먼트(Element)를 이용하면 태그를 만들 수 있고, 만들어진 태그에 텍스트 값을 추가할 수 있다.

       

      🎯 SubElement

      📌 서브엘리먼트(SubElement)를 이용하면 조금 더 편리하게 태그를 추가할 수 있다.

       

       

      실행 결과는 다음과 같다.

      <note><to>Tove</to><from>Jani</from></note>

       

      서브엘리먼트는 태그명과 태그의 텍스트 값을 한 번에 설정할 수 있다. 또는 다음과 같이 태그 사이에 태그를 추가하거나 특정 태그를 삭제할 수도 있다.

       

       

      위의 예는 dummy라는 태그를 삽입하고 삭제하는 경우이다.

       

      🎯 애트리뷰트 추가하기

      📌 note 태그에 애트리뷰트(attribute)를 추가해 본다.

       

       

      다음과 같이 엘리먼트 생성 시 직접 애트리뷰트 값을 추가하는 방법을 사용해도 된다.

      note = Element("note", data = "20170725")

       

      실행 결과는 다음과 같다.

      <note data="20170725"><to>Tove</to><from>Jani</from></note>

       

       

      완성된 소스는 다음과 같다.

       

       

      실행 결과는 다음과 같다.

      <note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekned</body></note>

       

      🎯 indent 함수

      📌 정렬된 형태의 xml 값을 보려면 다음과 같이 indent 함수를 사용해 보자.

       

       

      indent 함수를 이용하면 다음과 같이 정렬된 형태의 xml 값을 확인할 수 있다.

      <note data="20170725">

          <to>Tove</to>

          <from>Jani</from>

          <heading>Reminder</heading>

          <body>Don't forget me this weekend</body>

      </note>

       

      🎯 파일에 쓰기(write) 수행하기

      from xml.etree.ElkementTree import ElementTree

      ElementTree(note).write("note.xml")

       

      note.xml이 생성되는 것을 확인할 수 있다.

       

       

      XML 문서 파싱하기

      📌 생성된 XML 문서를 파싱(parsing)하고 검색하는 방법에 대해서 알아본다.

      from xml.etree.ElementTree import parse

      tree = parse("note.xml")

      note = tree.getroot()

       

      ElementTree의 parse라는 함수를 이용하여 xml을 파싱할 수 있다.

       

      🎯 애트리뷰트 값 읽기

       

      get 메서드는 애트리뷰트의 값을 읽는다. 만약 두 번째 입력 인수로 디폴트 값을 주었다면 첫 번째 인자에 해당되는 애트리뷰트 값이 없을 경우 두 번째 값을 리턴한다.

       

      keys는 모든 애트리뷰트의 키 값을 리스트로 리턴하고, items는 key, value 쌍을 리턴한다. 애트리뷰트 값을 가져오는 방법은 앞에서 배운 딕셔너리와 동일함을 알 수 있다.

       

      결과는 다음과 같다.

      20170725

      default

      ['data']

      [('data', '20170725')]

       

      🎯 XML 태그 접근하기

      📌 XML 태그에 접근하는 방법은 다음과 같다.

      from_tag = note.find("from")

      from_tags = note.findall("from")

      from_text = note.findtext("from")

       

      note.find("from")은 note 태그 하위에 from과 일치하는 첫 번째 태그를 찾아서 리턴하고, 없으면 None을 리턴한다. note.findall("from")은 note 태그 하위에 from과 일치하는 모든 태그를 리스트로 리턴한다. note.findtext("from")은 note 태그 하위에 from과 일치하는 첫 번째 태그의 텍스트 값을 리턴한다.

       

      특정 태그의 모든 하위 엘리먼트를 순차적으로 처리할 때는 아래의 메서드를 사용한다.

      childs = note.getiterator()

      childs = note.getchildren()

       

      getiterator() 함수는 첫 번째 인수로 다음과 같이 태그명을 받을 수도 있다.

      note.getiterator("from")

       

      위와 같은 경우 from 태그의 하위 엘리먼트들이 순차적으로 리턴되며, 보통 다음과 같이 많이 사용된다.

      for parent in tree.getiterator():

          for child in parent:

              ...work on parent/child tuple

       

       

       

       

       

       

       

      728x90
      반응형
    상단으로