본문 바로가기
python

Python - XML 생성/선택, 쉬운 예제( Element, SubElement, insert )

by 맑은안개 2021. 10. 17.

실행환경

  • Python3
  • VS Code

Import xml library

  • xml 라이브러리는 python3의 Core library 이다.
# -*- coding:utf-8 -*-
from xml.etree.ElementTree import Element, SubElement , dump, indent

다음과 같은 xml을 만들어 보자.

<FRUITS DESCRIPTION="FRUIT SCHEME">
  <FRUIT ID="FR0001" KO_NAME="바나나" EN_NAME="BANANA">
    <FIELD 당도="4" />
    <FIELD 가격="4000" />
  </FRUIT>
  <FRUIT ID="FR0002" KO_NAME="사과" EN_NAME="APPLE" />
  <dummy>
    <test attr1="test" attr2="5000" attr3="True" />
  </dummy>
</FRUITS>

xml  element 로 이루어져있다. element 는 여러 attribute 를 갖는데 python xml 라이브러리에서 Element 클래스를 사용하여 생성할 수 있다.

루트 엘리먼트 생성

root_el = Element("FRUITS" , {"DESCRIPTION":"FRUIT SCHEME"})

위와 같이, FRUITS를 엘리먼트로 선언하고 name-value 형태를 갖는 속성을 추가했다.

하위 엘리먼트 추가하기

fruit_el = Element("FRUIT" , {"ID":"FR0001" , "KO_NAME":"바나나" , "EN_NAME":"BANANA"})
root_el.append(fruit_el)

append 를 사용하여 root 엘리먼트에 fruit 엘리먼트를 추가한다.

Insert 문으로 원하는 위치에 엘리먼트 추가하기

dummy = Element("dummy")
root_el.insert(2 , dummy)

insert 첫 번째 인자는 0부터 시작한다.

0일 때,

<FRUITS DESCRIPTION="FRUIT SCHEME">
  <dummy />
  <FRUIT ID="FR0001" KO_NAME="바나나" EN_NAME="BANANA">
    <FIELD 당도="4" />
    <FIELD 가격="4000" />
  </FRUIT>
  <FRUIT ID="FR0002" KO_NAME="사과" EN_NAME="APPLE" />
</FRUITS>

2일 때,

<FRUITS DESCRIPTION="FRUIT SCHEME">
  <FRUIT ID="FR0001" KO_NAME="바나나" EN_NAME="BANANA">
    <FIELD 당도="4" />
    <FIELD 가격="4000" />
  </FRUIT>
  <FRUIT ID="FR0002" KO_NAME="사과" EN_NAME="APPLE" />
  <dummy />
</FRUITS>

3일 때는 Out of Index가 예상되지만 마지막 index에 정상적으로 생성된다.

SubElement

첫 번째 인자로 부모 엘리먼트를 지정하고, 두 번째 인자는 Element 클래스와 선언하여 하위 엘리먼트를 작성할 수 있다.

SubElement(dummy, "test", {"attr1":"test", "attr2":"5000", "attr3":"True"})

최종 파일

# -*- coding:utf-8 -*-
from xml.etree.ElementTree import Element, SubElement , dump, indent

root_el = Element("FRUITS" , {"DESCRIPTION":"FRUIT SCHEME"})
fruit_el = Element("FRUIT" , {"ID":"FR0001" , "KO_NAME":"바나나" , "EN_NAME":"BANANA"})
root_el.append(fruit_el)

fruit_sub_el = Element("FIELD" , {"당도":"4"})
fruit_el.append(fruit_sub_el)
fruit_sub_el = Element("FIELD" , {"가격":"4000"})
fruit_el.append(fruit_sub_el)

interface = Element("FRUIT" , {"ID":"FR0002" , "KO_NAME":"사과" , "EN_NAME":"APPLE"})

root_el.append(interface)

dummy = Element("dummy")
root_el.insert(4 , dummy)
SubElement(dummy, "test", {"attr1":"test", "attr2":"5000", "attr3":"True"})

indent(root_el) 
dump(root_el)

들여쓰기 기능의 indent 함수를 사용하여 이쁘게 정렬 후, dump 함수를 사용하여 콘솔에 XML내용을 출력한다.

 

반응형