python
Python - XML 생성/선택, 쉬운 예제( Element, SubElement, insert )
맑은안개
2021. 10. 17. 18:32
실행환경
- 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내용을 출력한다.
반응형