1. 소개
Python은 다양한 데이터 형식을 쉽게 처리할 수 있는 유연한 프로그래밍 언어입니다. 그 중 XML(Extensible Markup Language)은 구조화된 데이터를 교환하고 저장하는 데 일반적으로 사용되며, API 응답과 구성 파일에서 널리 사용됩니다. Python에서는 표준 라이브러리나 타사 라이브러리를 사용하여 XML을 쉽게 작업할 수 있습니다. 이 기사는 Python을 사용한 기본부터 고급 XML 작업까지 모든 것을 명확하게 설명합니다.
2. XML 처리용 Python 라이브러리 소개
2.1 표준 라이브러리: xml.etree.ElementTree
Python의 표준 라이브러리 xml.etree.ElementTree은 XML 파일을 읽고 쓰는 것을 쉽게 하며, 트리 구조를 탐색하고 편집하는 편리한 도구입니다.
- 기본 파싱 :
import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() print(root.tag) # Output: "data"이 코드에서 data.xml이라는 이름의 XML 파일을 읽고 루트 요소의 태그를 표시합니다. 출력 결과가"data"임을 확인할 수 있습니다. - 파일이 존재하지 않을 때 오류 처리 :
파일이 존재하지 않으면 FileNotFoundError가 발생하므로, 다음과 같이 예외 처리를 추가할 수 있습니다:
try: tree = ET.parse('data.xml') root = tree.getroot() except FileNotFoundError: print("File not found.")
2.2 외부 라이브러리: lxml
고급 XML 작업을 위해 lxml 라이브러리를 추천합니다. lxml은 XPath와 XSLT를 사용한 강력한 XML 처리를 지원하여 표준 라이브러리로 달성하기 어려운 작업을 쉽게 수행할 수 있습니다.
- XPath를 사용한 요소 검색 :
from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country[@name="Liechtenstein"]') print(countries[0].tag) # Output: "country"이 코드에서 속성 name=”Liechtenstein”을 가진 country 요소를 검색합니다.

3. XML 파싱 및 조작
3.1 기본 파싱 단계
XML 파일을 파싱하고 트리 구조를 작업하려면 xml.etree.ElementTree의 parse()를 사용합니다. 이 메서드는 XML 파일을 읽고 트리의 루트 요소를 가져옵니다.
- 파일에서 파싱 :
import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot() print(root.tag) # Output: "rootTag"이 코드에서example.xmlXML 파일을 읽고 루트 요소의 태그 이름을 표시합니다.
3.2 요소 검색 및 속성 조작
XML 요소를 검색하려면 find() 또는 findall()을 사용합니다. 이를 통해 특정 요소나 속성을 쉽게 가져올 수 있습니다.
- 요소 검색 및 속성 가져오기 :
country = root.find('country') print(country.get('name')) # Output: "Liechtenstein" - 속성 조작 :
XML 요소의 속성을 조작하려면
get()으로 가져오고set()으로 설정합니다.country.set('currency', 'CHF') print(country.attrib) # Output: {'name': 'Liechtenstein', 'currency': 'CHF'}
4. XML 편집 및 저장
4.1 요소 편집 방법
XML 요소의 텍스트나 속성을 수정하여 XML 파일의 내용을 편집할 수 있습니다. 예를 들어, 요소의 텍스트를 변경하려면 다음과 같이 할 수 있습니다:
- 요소 텍스트 편집 :
rank = root.find('.rank') rank.text = '2' print(rank.text) # Output: "2"
4.2 XML 파일에 쓰기
수정된 XML을 파일에 저장하려면 write() 메서드를 사용합니다.
- XML 저장 :
tree.write('updated_data.xml')

5. 외부 라이브러리를 사용한 고급 처리
5.1 lxml을 사용한 고급 XML 조작
lxml 라이브러리를 사용하면 XPath를 사용한 복잡한 검색을 수행하고 XSLT를 사용해 XML을 다른 형식으로 변환할 수 있습니다.
- XPath를 사용한 요소 검색 :
from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country') for country in countries: print(country.get('name'))
5.2 XSLT를 사용한 XML 변환
XSLT를 사용해 XML을 HTML로 변환하는 예입니다.
- XML을 HTML로 변환 :
from lxml import etree xml_tree = etree.parse('data.xml') xsl_tree = etree.parse('style.xsl') transform = etree.XSLT(xsl_tree) result_tree = transform(xml_tree) result_tree.write('output.html', pretty_print=True)
6. 실습: 샘플 코드 및 설명
6.1 XML에서 데이터 추출 예시
XML 파일에서 데이터를 추출하고 특정 정보를 표시하는 샘플 코드입니다.
- 샘플 코드 :
import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() for country in root.findall('country'): name = country.get('name') rank = country.find('rank').text print(f"Country: {name}, Rank: {rank}")
6.2 XML 편집 및 저장 예시
XML 요소의 값을 편집하고 변경 사항을 저장하는 샘플 코드입니다.
- 샘플 코드 :
import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() rank = root.find('.//rank') rank.text = '2' tree.write('updated_data.xml')
7. 요약
Python에서 XML을 다룰 때, 표준 라이브러리 xml.etree.ElementTree를 사용하면 기본적인 XML 조작이 쉽습니다. 또한 lxml을 사용하면 XPath와 XSLT와 같은 고급 작업을 수행할 수 있습니다. 기사에 제시된 코드를 참고하고 직접 XML을 조작해 보세요.



