실행환경
- 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내용을 출력한다.
반응형
'python' 카테고리의 다른 글
python - 웹 크롤링 예제 ( Requests & BeautifulSoup ) (0) | 2022.04.22 |
---|---|
Python - pip 라이브러리 의존관계 트리로 확인하기 (0) | 2022.02.07 |
Python - Konlpy 설치 오류 시 해결방법 공유 ( ImportError: DLL load failed while importing _jpype, ERROR: Could not install packages due to an OSError:) (3) | 2021.04.20 |
Python3, url 인코딩하는 이유, 인코딩/디코딩 처리 (0) | 2021.04.19 |
Python - pip 설치 라이브러리 및 Path 확인, 버전 업데이트 하기 (0) | 2021.03.25 |