Python Element Tree 모듈 을 이용 하여 XML 을 처리 하 는 방법 에 대한 상세 한 설명
7048 단어 pythonelementtree 모듈xml
최근 작업 의 필요 로 인해 웹 서비스의 성능 을 테스트 하기 위해 Python 을 사용 하여 SOAP 요청 을 보 내 고 있 습 니 다.SOAP 는 XML 기반 이기 때문에 python 을 사용 하여 XML 데 이 터 를 처리 해 야 합 니 다.몇 가지 방안 을 비교 한 후에 마지막 으로 사용
xml.etree.ElementTree
모듈 을 선정 하여 실현 한다.이 글 은 사용
xml.etree.ElementTree
모듈 에서 자주 사용 하 는 몇 가지 조작 을 기록 하 였 으 며,나중에 잊 어 버 리 지 않도록 정리 한 셈 이다.나 눠 도 방법 이 필요 한 분 들 은 학습 을 참고 하 세 요.다음은 더 이상 말씀 드 리 지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.개술
다른 Python 이 XML 을 처리 하 는 방안 에 비해
xml.etree.ElementTree
모듈(다음은 ET 로 표시)은 상대 적 으로 간단 하고 인터페이스 도 우호 적 입 니 다.공식 문서에서 ET 모듈 에 대해 비교적 상세 하 게 설명 했다.전체적으로 보면 ET 모듈 은 세 가지 부분 으로 요약 할 수 있다.Element Tree 류,Element 류 와 XML 을 조작 하 는 함수 이다.
XML 은 트 리 구조 로 볼 수 있 으 며,ET 는 Element Tree 류 를 사용 하여 전체 XML 문 서 를 표시 하고,Element 류 를 사용 하여 XML 의 결점 을 표시 합 니 다.전체 XML 문서 에 대한 작업 은 일반적으로 Element Tree 대상 을 대상 으로 하고 XML 노드 에 대한 작업 은 일반적으로 Element 대상 을 대상 으로 합 니 다.
XML 파일 분석
ET 모듈 은 XML 파일 구조 Element Tree 대상 을 지원 합 니 다.예 를 들 어 XML 파일 example.xml 내용 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
</data>
ET 모듈 의parse()
함 수 를 사용 하여 지정 한 XML 파일 에서 Element Tree 대상 을 구성 할 수 있 습 니 다.
import xml.etree.ElementTree as ET
# XML ElementTree
tree = ET.parse('example.xml')
# XML Element
root = tree.getroot()
#
print root.tag
XML 파일 에서 Element Tree 대상 을 구성 한 후 결점 을 가 져 오 거나 결점 을 계속 조작 할 수 있 습 니 다.XML 문자열 분석
ET 모듈 의 from string()함 수 는 XML 문자열 에서 Element 대상 을 구성 하 는 기능 을 제공 합 니 다.
xml_str = ET.tostring(root)
print xml_str
root = ET.fromstring(xml_str)
print root.tag
이 어 위의 코드 는 ET 모듈 의tostring()
함 수 를 사용 하여 위 에 있 는 우리 구조의 루트 대상 을 문자열 로 바 꾼 다음fromstring()
함 수 를 사용 하여 Element 대상 을 다시 만 들 고 루트 변 수 를 부여 합 니 다.이때 루트 는 전체 XML 문서 의 근 결 점 을 대표 합 니 다.구조 XML
XML 문 서 를 구성 해 야 한다 면 ET 모듈 의 Element 류 와
SubElement()
함 수 를 사용 할 수 있 습 니 다.Element 클래스 를 사용 하여 Element 대상 을 루트 노드 로 만 든 다음
ET.SubElement()
함수 로 서브 노드 를 생 성 할 수 있 습 니 다.
a = ET.Element('a')
b = ET.SubElement(a, 'b')
b.text = 'leehao.me'
c = ET.SubElement(a, 'c')
c.attrib['greeting'] = 'hello'
d = ET.SubElement(a, 'd')
d.text = 'www.leehao.me'
xml_str = ET.tostring(a, encoding='UTF-8')
print xml_str
출력:
<?xml version='1.0' encoding='UTF-8'?>
<a><b>leehao.me</b><c greeting="hello" /><d>www.leehao.me</d></a>
파일 에 출력 할 필요 가 있 으 면 계속ElementTree.write()
방법 으로 처리 할 수 있 습 니 다.
# ElementTree write
tree = ET.ElementTree(a)
tree.write('a.xml', encoding='UTF-8')
실행 하면 XML 파일 a.xml 을 생 성 합 니 다.
<?xml version='1.0' encoding='UTF-8'?>
<a><b>leehao.me</b><c greeting="hello" /><d>www.leehao.me</d></a>
XML 노드 찾기 및 업데이트1.XML 노드 찾기
Element 류 는
Element.iter()
방법 을 제공 하여 지정 한 결점 을 찾 습 니 다.Element.iter()
조건 에 맞 는 모든 결산 점 을 찾 을 수 있 도록 모든 하위 결산 점 을 재 귀적 으로 찾 습 니 다.
# XML ElementTree
tree = ET.parse('example.xml')
# XML Element
root = tree.getroot()
# neighbor
for neighbor in root.iter('neighbor'):
print neighbor.attrib
출력:
{'direction': 'E', 'name': 'Austria'}
{'direction': 'W', 'name': 'Switzerland'}
{'direction': 'N', 'name': 'Malaysia'}
Element.findall()
또는Element.find()
방법 을 사용 하면 결점 의 직접 자 결점 에서 만 찾 을 수 있 고 재 귀적 으로 찾 지 않 습 니 다.
for country in root.findall('country'):
rank = country.find('rank').text
name = country.get('name')
print name, rank
출력:
Liechtenstein 1
Singapore 4
2.결산 점 업데이트결점 의 텍스트 를 업데이트 해 야 한다 면 직접 수정
Element.text
을 통 해 이 루어 질 수 있다.결점 의 속성 을 업데이트 해 야 한다 면 직접 수정Element.attrib
을 통 해 이 루어 질 수 있다.노드 를 업데이트 한 후
ElementTree.write()
방법 으로 업 데 이 트 된 XML 문 서 를 파일 에 기록 할 수 있 습 니 다.
# XML ElementTree
tree = ET.parse('example.xml')
# XML Element
root = tree.getroot()
for rank in root.iter('rank'):
new_rank = int(rank.text) + 1
rank.text = str(new_rank)
rank.attrib['updated'] = 'yes'
tree.write('output.xml', encoding='UTF-8')
새로 생 성 된 output.xml 파일 아래:
<?xml version='1.0' encoding='UTF-8'?>
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
</data>
example.xml 파일 을 비교 하면 output.xml 파일 이 업데이트 되 었 음 을 볼 수 있 습 니 다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.