python

[python] XML 파일 만들기

vhxpffltm 2020. 5. 8. 21:46
반응형

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

 

 

반응형