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