제목:

파이썬으로 간단한 XML 파일 만들기

날짜: Posted on

이 포스트에서는 파이썬으로 간단한 XML 파일을 만드는 방법을 소개합니다.

여기서는 lxml 확장 라이브러리를 사용하여 만드는 방법을 사용합니다.

from lxml import etree

# Data
members =  ["소원", "예린", "은하", "유주", "신비", "엄지"]
albums = [ ["EP 1집", "Season of Glass"],  ["EP 2집", "Flower Bud"],
           ["EP 3집", "Snowflake"],        ["정규 1집", "LOL"] ]

# Create XML 
root = etree.Element("girlgroup")

# Set name
x_name = etree.Element("name")
x_name.text = "여자친구"
x_name.set("alias", "GFRIEND")

# Set members
x_members = etree.Element("members")
for member in members:
	x_member = etree.SubElement(x_members, "member")
	x_member.text = member

# Set albums
x_albums = etree.Element("albums")
for album in albums:
	x_album = etree.SubElement(x_albums, "album")
	x_album.text = album[1]
	x_album.set("order", album[0])

# Append elements
root.append(x_name)
root.append(x_members)
root.append(x_albums)

# Print
x_output = etree.tostring(root, pretty_print=True, encoding='UTF-8')
x_header = '<?xml version="1.0" encoding="UTF-8"?>\n'
print(x_header + x_output.decode('utf-8') )

PHP로 간단한 XML 파일 만들기 예제에서 본 것과 같이 걸그룹 여자친구에 대한 간단한 정보를 XML 문서로 만드는 코드입니다.

이 코드에 대해 설명을 하자면, 먼저 1번째 줄은 lxml 확장 라이브러리에서 etree 모듈을 불러옵니다. 그리고 4번 줄부터 6번 줄까지는 멤버 목록과 앨범 목록을 배열로 저장해 놓습니다. 9번 줄에서 ‘girlgroup’을 최상위 요소로 갖는 XML 객체 변수를 정의함으로써 XML 생성을 시작합니다.

가장 먼저 ‘여자친구’라는 값을 갖는 name 요소를 생성합니다. 12번 줄에서 name 요소를 생성하고 이를 x_name이라는 객체 변수에 대입한 다음 이 객체 변수의 text 프로퍼티에 ‘여자친구’를 대입하고 set 메소드를 이용하여 ‘GFRIEND’라는 값을 갖는 ‘alias’라는 속성을 추가합니다.

그 다음은 members 요소 밑에 member 요소를 추가합니다. (17번 줄부터 20번 줄까지) 앞의 name 요소와 같은 방법으로 x_members라는 객체 변수를 생성해서 그 밑에 member 요소를 넣는데, 미리 정의해 놓은 멤버 목록 배열을 가지고 반복문을 만듭니다. x_members라는 객체 변수가 가리키는 요소 밑에 member 요소를 생성하여 x_member라는 객체 변수를 만들고 데이터값으로 members 배열의 원소들을 하나씩 대입합니다.

albums 요소 밑에 album 요소를 넣는 것도 같은 방법입니다. (23번 줄부터 27번 줄까지) 다만, albums 배열의 경우 [“EP 1집”, “Season of Glass”] 식으로 2차원 배열로 이루어져 있기 때문에, 그 중 뒤의 것(“Season of Glass”)을 데이터값으로 넣기 위해 album[1]로 지정하고 앞의 것(“EP 1집”)은 ‘order’라는 속성의 속성값으로 넣기 위해 album[0]으로 지정합니다.

이제 추가된 모든 요소를 반영하기 위해 append 메소드를 사용합니다. 30번 줄에서 x_name을, 31번 줄에서 x_members를, 32번 줄에서 x_albums를 추가합니다. 이 셋은 각각 name, members, albums 요소에 대응합니다.

마지막으로, 35번 줄부터 37번 줄까지가 생성된 XML을 문서화하기 위한 코드입니다. 요소 추가가 끝난 root 객체 변수를 문자열화하는데, 가지런히 출력(pretty_print) 옵션을 True로 주고 인코딩을 UTF-8로 지정합니다. 그리고 <?xml version="1.0" encoding="UTF-8"?> 헤더를 문자열로 정의해 놓습니다. (tostring 메소드에서 xml_declaration 옵션을 True로 주는 방법도 있지만 이 경우 헤더의 따옴표가 작은따옴표(‘)로 표시됩니다.) 그리고 헤더와 함께 문서화된 XML을 UTF-8로 디코딩하여 출력합니다.

<?xml version="1.0" encoding="UTF-8"?>
<girlgroup>
  <name alias="GFRIEND">여자친구</name>
  <members>
    <member>소원</member>
    <member>예린</member>
    <member>은하</member>
    <member>유주</member>
    <member>신비</member>
    <member>엄지</member>
  </members>
  <albums>
    <album order="EP 1집">Season of Glass</album>
    <album order="EP 2집">Flower Bud</album>
    <album order="EP 3집">Snowflake</album>
    <album order="정규 1집">LOL</album>
  </albums>
</girlgroup>

결과는 이같이 됩니다. 이렇게 해서 파이썬으로 XML 문서를 간단히 만들어 볼 수 있습니다.

이 코드는 문서를 그냥 화면에 보여주기만 합니다. 만약 파일로 저장하고자 한다면,

# Write to xml file
x_output = etree.tostring(root, pretty_print=True, encoding='UTF-8')
x_header = '<?xml version="1.0" encoding="UTF-8"?>\n'
ff=open('./sample.xml', 'w', encoding="utf-8")
ff.write(x_header + x_output.decode('utf-8') )

이렇게 파일로 저장하는 코드를 쓸 수도 있습니다.

2개의 댓글이 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다