Python 데이터 지속성-XML 파서
XML은 eXtensible Markup Language. HTML 또는 SGML과 매우 유사한 이식 가능한 오픈 소스 및 크로스 플랫폼 언어이며 World Wide Web Consortium에서 권장합니다.
잘 알려진 데이터 교환 형식으로 웹 서비스, 오피스 도구 및 웹 서비스와 같은 많은 애플리케이션에서 사용됩니다. Service Oriented Architectures(SOA). XML 형식은 기계와 사람이 모두 읽을 수 있습니다.
표준 Python 라이브러리의 xml 패키지는 XML 처리를위한 다음 모듈로 구성됩니다.
Sr. 아니. | 모듈 및 설명 |
---|---|
1 | xml.etree.ElementTree 간단하고 가벼운 XML 프로세서 인 ElementTree API |
2 | xml.dom DOM API 정의 |
삼 | xml.dom.minidom 최소한의 DOM 구현 |
4 | xml.sax SAX2 인터페이스 구현 |
5 | xml.parsers.expat Expat 파서 바인딩 |
XML 문서의 데이터는 루트 및 요소로 시작하는 트리와 같은 계층 형식으로 정렬됩니다. 각 요소는 트리의 단일 노드이며 <> 및 </> 태그로 묶인 속성이 있습니다. 하나 이상의 하위 요소가 각 요소에 할당 될 수 있습니다.
다음은 XML 문서의 전형적인 예입니다.
<?xml version = "1.0" encoding = "iso-8859-1"?>
<studentlist>
<student>
<name>Ratna</name>
<subject>Physics</subject>
<marks>85</marks>
</student>
<student>
<name>Kiran</name>
<subject>Maths</subject>
<marks>100</marks>
</student>
<student>
<name>Mohit</name>
<subject>Biology</subject>
<marks>92</marks>
</student>
</studentlist>
사용 중 ElementTree모듈, 첫 번째 단계는 트리의 루트 요소를 설정하는 것입니다. 각 요소에는 dict 객체 인 태그와 속성이 있습니다. 루트 요소의 경우 속성은 빈 사전입니다.
import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')
이제 루트 요소 아래에 하나 이상의 요소를 추가 할 수 있습니다. 각 요소 객체는SubElements. 각 하위 요소에는 속성과 텍스트 속성이 있습니다.
student=xmlobj.Element('student')
nm=xmlobj.SubElement(student, 'name')
nm.text='name'
subject=xmlobj.SubElement(student, 'subject')
nm.text='Ratna'
subject.text='Physics'
marks=xmlobj.SubElement(student, 'marks')
marks.text='85'
이 새 요소는 append () 메서드를 사용하여 루트에 추가됩니다.
root.append(student)
위의 방법을 사용하여 원하는만큼 요소를 추가합니다. 마지막으로 루트 요소 개체가 파일에 기록됩니다.
tree = xmlobj.ElementTree(root)
file = open('studentlist.xml','wb')
tree.write(file)
file.close()
이제 XML 파일을 구문 분석하는 방법을 살펴 보겠습니다. 이를 위해 ElementTree 생성자에서 파일 매개 변수로 이름을 제공하는 문서 트리를 구성합니다.
tree = xmlobj.ElementTree(file='studentlist.xml')
트리 개체에는 getroot() 메소드는 루트 요소를 얻고 getchildren ()은 그 아래에있는 요소 목록을 리턴합니다.
root = tree.getroot()
children = root.getchildren()
각 하위 요소에 해당하는 사전 개체는 각 하위 노드의 하위 요소 컬렉션을 반복하여 구성됩니다.
for child in children:
student={}
pairs = child.getchildren()
for pair in pairs:
product[pair.tag]=pair.text
그런 다음 각 사전은 사전 객체의 원래 목록을 반환하는 목록에 추가됩니다.
SAX이벤트 기반 XML 구문 분석을위한 표준 인터페이스입니다. SAX로 XML을 구문 분석하려면 xml.sax.ContentHandler를 서브 클래 싱하여 ContentHandler가 필요합니다. 관심있는 이벤트에 대한 콜백을 등록한 다음 파서가 문서를 진행하도록합니다.
SAX는 문서가 크거나 전체 파일이 메모리에 저장되지 않으므로 디스크에서 파일을 읽을 때 파일을 구문 분석하므로 메모리 제한이있을 때 유용합니다.
문서 개체 모델
(DOM) API는 World Wide Web Consortium 권장 사항입니다. 이 경우 전체 파일을 메모리로 읽어 들이고 계층 적 (트리 기반) 형식으로 저장하여 XML 문서의 모든 기능을 나타냅니다.
DOM만큼 빠르지 않은 SAX, 대용량 파일. 반면에 DOM은 많은 작은 파일에서 사용되는 경우 리소스를 죽일 수 있습니다. SAX는 읽기 전용이지만 DOM은 XML 파일 변경을 허용합니다.