Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 XML 파일에서 특정 노드 추출하는 방법 (XPath 활용)

```html

Python의 xml 라이브러리를 사용하면 XML 파일에서 원하는 어떤 노드든 자유롭게 가져올 수 있습니다. 다만 특정 노드를 정확하게 추출하려면 XPath 문법을 이해하고 있어야 합니다. XPath는 XML 문서 안에서 요소(element)나 속성(attribute)을 탐색하기 위한 경로 표현식 언어로, 기본 문법은 W3Schools XPath 튜토리얼에서 자세히 배울 수 있습니다.

예제 XML 파일

설명을 위해 다음과 같은 구조의 XML 파일(my_file.xml)이 있다고 가정해 보겠습니다.

<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>

조건에 맞는 노드 추출하기

위 파일에서 lang 속성이 'en'인 모든 title 노드를 추출하고 싶다면, XPath 표현식을 findall() 메서드에 넘겨주면 됩니다.

from xml.etree import ElementTree

tree = ElementTree.parse('my_file.xml')
root = tree.getroot()

# lang 속성이 'en'인 모든 title 노드 찾기
for node in root.findall(".//title[@lang='en']"):
print(node.text)

실행 결과는 다음과 같습니다.

Everyday Italian
Harry Potter

코드 설명

  • .//title[@lang='en'] : 루트 노드 아래의 모든 하위 계층에서 lang 속성값이 'en'인 title 요소를 의미합니다.
  • findall() : 조건에 일치하는 모든 요소를 리스트로 반환합니다. 첫 번째 결과 하나만 필요하다면 find()를 사용하는 것이 좋습니다.
  • node.text : 해당 요소가 담고 있는 텍스트 내용을 반환합니다.

알아두면 좋은 팁

오래된 예제에서 종종 보이는 getchildren() 메서드는 Python 3.9부터 제거되었으며, XPath 경로는 반드시 .//처럼 상대 경로 형식으로 시작해야 한다는 점에 유의하세요. 또한 표준 라이브러리보다 강력한 XPath 기능이 필요하다면 lxml 라이브러리를 사용하는 것도 훌륭한 대안입니다.