Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 XML 처리 모듈

<시간/>

XML은 "확장 가능한 마크업 언어"를 나타냅니다. 데이터가 특정한 구조를 가지는 웹페이지에서 주로 사용됩니다. 시작 및 종료 태그로 정의된 요소가 있습니다. 태그는 <로 시작하고>로 끝나는 마크업 구조입니다. 시작 태그와 끝 태그 사이의 문자는 요소의 내용입니다. 요소는 "하위 요소"라고 하는 다른 요소를 포함할 수 있습니다.

다음은 이 튜토리얼에서 사용할 XML 파일의 예입니다.

<?xml version="1.0"?>
<Tutorials>
   <Tutorial id="Tu101">
      <author>Vicky, Matthew</author>
      <title>Geo-Spatial Data Analysis</title>
      <stream>Python</stream>
      <price>4.95</price>
      <publish_date>2020-07-01</publish_date>
      <description>Learn geo Spatial data Analysis using Python.</description>
   </Tutorial>
   <Tutorial id="Tu102">
      <author>Bolan, Kim</author>
      <title>Data Structures</title>
      <stream>Computer Science</stream>
      <price>12.03</price>
      <publish_date>2020-1-19</publish_date>
      <description>Learn Data structures using different programming lanuages.</description>
   </Tutorial>
   <Tutorial id="Tu103">
      <author>Sora, Everest</author>
      <title>Analytics using Tensorflow</title>
      <stream>Data Science</stream>
      <price>7.11</price>
      <publish_date>2020-1-19</publish_date>
      <description>Learn Data analytics using Tensorflow.</description>
   </Tutorial>
</Tutorials>

xml.etree.ElementTree를 사용하여 xml 읽기

이 모듈은 xml 파일의 루트에 대한 액세스를 제공하고 내부 요소의 내용에 액세스할 수 있습니다. 아래 예에서는 text라는 속성을 사용하고 해당 요소의 내용을 가져옵니다.

예시

import xml.etree.ElementTree as ET
xml_tree = ET.parse('E:\\TutorialsList.xml')
xml_root = xml_tree.getroot()
# Header
print('Tutorial List :')
for xml_elmt in xml_root:
   for inner_elmt in xml_elmt:
      print(inner_elmt.text)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

Tutorial List :
Vicky, Matthew
Geo-Spatial Data Analysis
Python
4.95
2020-07-01
Learn geo Spatial data Analysis using Python.
Bolan, Kim
Data Structures
Computer Science
12.03
2020-1-19
Learn Data structures using different programming lanuages.
Sora, Everest
Analytics using Tensorflow
Data Science
7.11
2020-1-19
Learn Data analytics using Tensorflow.

xml 속성 가져오기

루트 태그에서 속성 및 해당 값 목록을 얻을 수 있습니다. 속성을 찾으면 XML 트리를 쉽게 탐색하는 데 도움이 됩니다.

예시

import xml.etree.ElementTree as ET
xml_tree = ET.parse('E:\\TutorialsList.xml')
xml_root = xml_tree.getroot()
# Header
print('Tutorial List :')
for movie in xml_root.iter('Tutorial'):
   print(movie.attrib)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

Tutorial List :
{'id': 'Tu101'}
{'id': 'Tu102'}
{'id': 'Tu103'}

결과 필터링

이 모듈의 findall() 함수를 사용하여 xml 트리에서 결과를 필터링할 수도 있습니다. 아래 예에서 가격이 12.03인 자습서의 ID를 찾습니다.

예시

import xml.etree.ElementTree as ET
xml_tree = ET.parse('E:\\TutorialsList.xml')
xml_root = xml_tree.getroot()
# Header
print('Tutorial List :')
for movie in xml_root.findall("./Tutorial/[price ='12.03']"):
   print(movie.attrib)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

Tutorial List :
{'id': 'Tu102'}

DOM API로 XML 구문 분석

xml.dom 모듈을 사용하여 minidom 개체를 만듭니다. minidom 개체는 XML 파일에서 DOM 트리를 빠르게 생성하는 간단한 파서 메서드를 제공합니다. 샘플 구문은 minidom 객체의 parse( file [,parser] ) 함수를 호출하여 file 로 지정된 XML 파일을 DOM 트리 객체로 파싱합니다.

예시

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse('E:\\TutorialsList.xml')
collection = DOMTree.documentElement

# Get all the movies in the collection
tut_list = collection.getElementsByTagName("Tutorial")

print("*****Tutorials*****")
# Print details of each Tutorial.
for tut in tut_list:

   strm = tut.getElementsByTagName('stream')[0]
   print("Stream: ",strm.childNodes[0].data)

   prc = tut.getElementsByTagName('price')[0]
   print("Price: ", prc.childNodes[0].data)

출력

위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -

*****Tutorials*****
Stream: Python
Price: 4.95
Stream: Computer Science
Price: 12.03
Stream: Data Science
Price: 7.11