Python에서 XML 처리: 표준 라이브러리부터 lxml까지 완전 가이드

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은 XPathXSLT를 사용한 강력한 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.ElementTreeparse()를 사용합니다. 이 메서드는 XML 파일을 읽고 트리의 루트 요소를 가져옵니다.

  • 파일에서 파싱 : import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot() print(root.tag) # Output: "rootTag" 이 코드에서 example.xml XML 파일을 읽고 루트 요소의 태그 이름을 표시합니다.

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')

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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을 조작해 보세요.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール