XML파일을 만들어야 해서 직접 XML파일을 만들려하다 그것보다는 파이썬을 통해서 XML파일을 만들 수 있다고 해서 파이썬 언어로 작성하여 XML파일을 만들었다.
파이썬에서는 XML파일을 만들기 위한 표준 라이브러리를 지원하며 별도의 패키지 설치 없이 사용할 수 있다.
1
2
|
from xml.etree.ElementTree import Element,SubElement,ElementTree,dump
#-*-coding:utf-8 -*-
|
cs |
위와 같이 라이브러리를 import하면 된다. 트리 구조의 XML에서 Element를 root로 지정하여 트리구조의 XML을 만들수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
filename = "sample2"
root = Element('read')
SubElement(root,'number').text = "번호"
name1 = SubElement(root, 'A')
name1.text = "가장 큰것"
SubElement(name1,'A_t1').text = "1"
SubElement(name1,'A_t2').text = "2"
SubElement(name1,'A_t3').text = "3"
SubElement(name1,'A_t4').text = "4"
SubElement(name1,'A_t5').text = "5"
name2 = SubElement(root,'B')
name2.text = "다음으로 큰것"
name3 = SubElement(name2,'B_t1')
name3.text = '11'
name4 = SubElement(name3,'C').text = "2222"
indent(root)
dump(root)
tree = ElementTree(root)
tree.write('./'+filename + '.xml',encoding='utf-8', xml_declaration=True)
|
cs |
filename 은 우리가 저장할 파일명을 설정한다.
이제 root 변수가 XML의 최상위 노드가 될 것이다. 5번 라인이 root 바로 하위 레벨의 요소를 추가한다.
그것의 태그<> 이름은 number이고 .text로 바로 '번호'라는 텍스트를 지정한다.
변수중 name1, name2, name3, name4 가 있으며 name4를 제외한 나머지는 root의 하위계층이고 name4는 root3의 하위 노드이다. 쉽게 이해할 수 있다.
주의할점으로 SubElement의 2번째 argument로 한글을 사용하면 에러가 발생할 수 있으니 주의해야 한다.
ident는 함수를 만들었는데 위 코드를 그냥 실행하면 XML파일이 줄띄움 없이 알아보기 힘들게 되어져 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def indent(elem, level=0):
i = "\n" + level*" "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
|
cs |
코드는 위와 같으며 해당 함수로 XML파일 구조에 맞게 줄띄움을 나타낼 수 있다.
import에서 정의한 dump()는 파이썬 에디터 내에서 결과를 출력하고 마지막으로 ElementTree()를 호출하여 write()함수로 파일을 생성한다. 여기서 <?xml version... > 과 같은 표준을 맨위에 출력하기 위해서 write() 함수에
encoding='utf-8', xml_declaration=True 을 입력하면 된다,. 결과는 아래와 같다.
줄 뛰움이 조금 잘못된 부분은 수정해서 다시 정리하겠다.
reference
https://ballentain.tistory.com/8
http://parkjuwan.dothome.co.kr/wordpress/2017/02/14/make-simplexml-py/
https://wikidocs.net/21137
'python' 카테고리의 다른 글
[Python] Pandas 데이터 프레임 (엑셀, 크롤링) (1) | 2020.06.14 |
---|---|
XSD: XML 스키마 정의 (0) | 2020.05.13 |
[python] 엑셀 데이터 추출 및 메모장 데이터 가져오기 (0) | 2020.04.30 |
[python] 백준 6219 소수의 자격 *리스트 초기화* (1) | 2020.04.27 |
[python] 백준 4659 비밀번호 발음하기 (0) | 2020.04.27 |