Python에서 XML 파서 만들기
-
ElementTree
API를 사용하여 Python에서 XML 문서 구문 분석 -
minidom
모듈을 사용하여 Python에서 XML 문서 구문 분석 -
Beautiful Soup
라이브러리를 사용하여 Python에서 XML 문서 구문 분석 -
xmltodict
라이브러리를 사용하여 Python에서 XML 문서 구문 분석 -
lxml
라이브러리를 사용하여 Python에서 XML 문서 구문 분석 -
untangle
모듈을 사용하여 Python에서 XML 문서 구문 분석 -
declxml
라이브러리를 사용하여 Python에서 XML 문서 구문 분석
XML은 eXtensible Markup Language의 약자로 데이터를 저장하고 전송하는 데 사용되는 자체 설명 언어입니다. Python은 XML 문서의 구문 분석 및 수정을 위한 매체를 제공합니다.
이 자습서는 Python에서 XML 문서를 구문 분석하는 다양한 방법에 중점을 두고 설명합니다.
ElementTree
API를 사용하여 Python에서 XML 문서 구문 분석
xml.etree.ElementTree
모듈은 XML 문서를 구문 분석하고 XML 데이터를 생성하는 효율적이면서도 간단한 API를 생성하는 데 활용됩니다.
다음 코드는 xml.etree.ElementTree
모듈을 사용하여 Python에서 XML 문서를 구문 분석합니다.
# >= Python 3.3 code
import xml.etree.ElementTree as ET
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo>"""
tree = ET.fromstring(file1)
x = tree.findall("bar/type")
for item in x:
print(item.get("foobar"))
출력:
Hello
God
여기에서 XML 데이터를 삼중 따옴표 안에 문자열로 전달합니다. ElementTree
모듈의 parse()
함수를 사용하여 실제 XML 문서를 가져올 수도 있습니다.
cElementTree
모듈은 ElementTree
API의 C 구현이며 cElementTree
가 최적화되었다는 유일한 차이점이 있습니다. 즉, ElementTree
모듈보다 약 15-20배 더 빠르게 구문 분석할 수 있으며 매우 적은 양의 메모리를 사용합니다.
그러나 Python 3.3 이상에서는 cElementTree
모듈이 더 이상 사용되지 않으며 ElementTree
모듈은 더 빠른 구현을 사용합니다.
minidom
모듈을 사용하여 Python에서 XML 문서 구문 분석
xml.dom.minidom
은 DOM(Document Object Model) 인터페이스의 기본 구현으로 정의할 수 있습니다. 모든 DOM 응용 프로그램은 일반적으로 XML 개체의 구문 분석으로 시작합니다. 따라서 이 방법은 Python에서 XML 문서를 구문 분석하는 가장 빠른 방법입니다.
다음 코드는 minidom
모듈의 parse()
함수를 사용하여 Python에서 XML 문서를 구문 분석합니다.
XML 파일(sample1.xml):
<data>
<strings>
<string name="Hello"></string>
<string name="God"></string>
</strings>
</data>
파이썬 코드:
from xml.dom import minidom
xmldoc = minidom.parse("sample1.xml")
stringlist = xmldoc.getElementsByTagName("string")
print(len(stringlist))
print(stringlist[0].attributes["name"].value)
for x in stringlist:
print(x.attributes["name"].value)
출력:
2
Hello
God
이 모듈을 사용하면 ElementTree
API와 유사한 XML을 문자열로 전달할 수도 있습니다. 그러나 이를 달성하기 위해 parseString()
함수를 사용합니다.
xml.etree.ElementTree
및 xml.dom.minidom
모듈은 모두 악의적으로 구성된 데이터에 대해 안전하지 않다고 합니다.
Beautiful Soup
라이브러리를 사용하여 Python에서 XML 문서 구문 분석
Beautiful Soup
라이브러리는 웹 스크래핑 프로젝트를 위해 설계되었으며 XML
및 HTML
파일에서 데이터를 가져옵니다. Beautiful Soup
은 정말 빠르며 만나는 모든 것을 구문 분석할 수 있습니다.
이 라이브러리는 프로그램에 대한 트리 탐색 프로세스도 수행하고 XML 문서를 구문 분석합니다. 또한 Beautiful Soup
은 주어진 소스 코드를 꾸미는 데에도 사용됩니다.
Beautiful Soup
라이브러리를 수동으로 설치한 다음 이 방법에 대한 Python 코드로 가져와야 합니다. 이 라이브러리는 pip
명령을 사용하여 설치할 수 있습니다. 최신 버전인 Beautiful Soup 4
라이브러리는 Python 2.7 이상에서 작동합니다.
다음 코드는 Beautiful Soup
라이브러리를 사용하여 Python에서 XML 문서를 구문 분석합니다.
from bs4 import BeautifulSoup
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo>"""
a = BeautifulSoup(file1)
print(a.foo.bar.type["foobar"])
print(a.foo.bar.findAll("type"))
출력:
u'Hello'
[<type foobar="Hello"></type>, <type foobar="God"></type>]
Beautiful Soup
는 파싱에 사용되는 다른 어떤 도구보다 빠르지만 이 방법을 이해하고 구현하는 것이 때때로 어려울 수 있습니다.
xmltodict
라이브러리를 사용하여 Python에서 XML 문서 구문 분석
xmltodict
라이브러리는 XML 파일의 프로세스를 JSON과 유사하게 만드는 데 도움이 됩니다. XML 파일을 구문 분석하려는 경우에도 사용할 수 있습니다. 이 경우 xmltodict
모듈은 XML 파일을 Ordered Dictionary
로 구문 분석하여 사용할 수 있습니다.
xmltodict
라이브러리를 수동으로 설치한 다음 XML 파일이 포함된 Python 코드로 가져와야 합니다. xmltodict
설치는 매우 기본적이며 표준 pip
명령을 사용하여 수행할 수 있습니다.
다음 코드는 xmltodict
라이브러리를 사용하여 Python에서 XML 문서를 구문 분석합니다.
import xmltodict
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo> """
result = xmltodict.parse(file1)
print(result)
출력:
OrderedDict([(u'foo', OrderedDict([(u'bar', OrderedDict([(u'type', [OrderedDict([(u'@foobar', u'Hello')]), OrderedDict([(u'@foobar', u'God')])])]))]))])
lxml
라이브러리를 사용하여 Python에서 XML 문서 구문 분석
lxml
라이브러리는 XML 및 HTML 파일을 구문 분석하는 데 사용되는 Python에서 간단하지만 매우 강력한 API를 제공할 수 있습니다. ElementTree
API를 libxml2/libxslt
와 결합합니다.
간단히 말해서 lxml
라이브러리는 이전 ElementTree
라이브러리를 확장하여 XML 스키마, XPath 및 XSLT와 같은 훨씬 더 새로운 기능을 지원합니다.
여기서는 lxml.objectify
라이브러리를 사용합니다. 다음 코드는 lxml
라이브러리를 사용하여 Python에서 XML 문서를 구문 분석합니다.
from collections import defaultdict
from lxml import objectify
file1 = """<foo>
<bar>
<type foobar="1"/>
<type foobar="2"/>
</bar>
</foo>"""
c = defaultdict(int)
root = objectify.fromstring(file1)
for item in root.bar.type:
c[item.attrib.get("foobar")] += 1
print(dict(c))
출력:
{'1': 1, '2': 1}
여기 이 프로그램에서 c
변수는 사전에서 사용 가능한 각 항목의 개수를 저장하는 데 사용됩니다.
untangle
모듈을 사용하여 Python에서 XML 문서 구문 분석
untangle
모듈은 XML을 Python 개체로 변환하는 데 중점을 둔 구현하기 쉬운 모듈입니다. pip
명령을 사용하여 쉽게 설치할 수도 있습니다. 이 모듈은 Python 2.7 이상에서 작동합니다.
다음 코드는 untangle
모듈을 사용하여 Python에서 XML 문서를 구문 분석합니다.
XML 파일(sample1.xml):
<foo>
<bar>
<type foobar="Hello"/>
</bar>
</foo>
파이썬 코드:
import untangle
x = untangle.parse("/path_to_xml_file/sample1.xml")
print(x.foo.bar.type["foobar"])
출력:
Hello
declxml
라이브러리를 사용하여 Python에서 XML 문서 구문 분석
Declarative XML Processing
의 약자인 declxml
라이브러리는 XML 문서를 직렬화하고 구문 분석하는 간단한 API를 제공하는 데 사용됩니다. 이 라이브러리는 minidom
또는 ElementTree
와 같은 다른 인기 있는 API를 사용할 때 필요한 구문 분석 논리의 크고 긴 코드 덩어리를 통과해야 하는 필요성을 대체하고 프로그래머의 작업량을 줄이는 것을 목표로 합니다.
declxml
모듈은 pip
또는 pipenv
명령을 사용하여 시스템에 쉽게 설치할 수 있습니다. 다음 코드는 declxml
라이브러리를 사용하여 Python에서 XML 문서를 구문 분석합니다.
import declxml as xml
xml_string = """
<foo>
<bar>
<type foobar="1"/>
<type foobar="3"/>
<type foobar="5"/>
</bar>
</foo>
"""
processor = xml.dictionary(
"foo", [xml.dictionary("bar", [xml.array(xml.integer("type", attribute="foobar"))])]
)
xml.parse_from_string(processor, xml_string)
출력:
{'bar': {'foobar': [1, 3, 5]}}
이 방법에서는 주어진 XML 문서의 구조를 선언적으로 특성화하고 XML과 Python 데이터 구조 간의 매핑을 위해 프로세서를 사용합니다.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn