IT Log
[Python] xml.etree.ElementTree (XML 구문 분석) 본문
728x90
반응형
xml.etree.ElementTree
XML 데이터를 구문 분석하고 만들기 위한 단순하고 효율적인 API를 구현.
import xml.etree.ElementTree as ET
XML 데이터 가져오기
...
# XML파일 가져오기
tree = ET.parse('file_path')
...
최상위 경로 가져오기
...
# 최상위 Tag 가져오기
root = tree.getroot()
...
문자열에서 XML 읽어오기
...
# 문자열 XML
xml_as_str = ''' <?xml version="1.0"?>
<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>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
'''
# 문자열로된 XML 가져오기
tree = ET.fromstring(xml_as_str)
...
인덱스로 특정 노드 읽어오기
...
# 최상위 Tag에서 3번째 Tag의 text를 가져오기
root[0][2].text
또는
# 최상위 Tag에서 2번째 Tag의 3번째 Tag명을 가져오기
root[0][1][2].tag
...
반복 구문 읽어오기
...
# root 하위에 child라는 Tag의 text를 출력
for child in root.iter('child'):
print(child.text)
...
XML 파일에 namespace가 있는 경우
...
# namespace 등록
ns = {'name' : 'http://name.example.com', 'space' : 'http://space.example.com'}
name = root.findall('name:tag', ns)
space = root.findall('space:tag', ns)
...
XPath 사용하기
...
# 해당 경로에 'third' Tag 전부 찾기
root.findall("./first/second/third")
# 'second' Tag 하위에 name속성이 'abc'인 Tag 전부 찾기
root.findall(".//second/..[@name='abc']")
# name속성이 'abc'인 Tag 하위에 'third' Tag 전부 찾기
root.findall(".//*[@name='abc']/third")
# 2번쨰 'third' Tag 찾기
root.findall(".//third[1]")
...
XPath 구문
구문 | 의미 |
tag | 주어진 tag가 있는 모든 하위 요소를 선택 |
* | 모든 하위요소를 선택 |
. | 현재 노드를 선택 (상대 경로) |
// | 현재 요소 아래의 모든 수준에서 모든 하위 요소 선택 |
.. | 상위 요소를 선택 |
[@attrib] | 주어진 속성을 가진 모든 요소를 선택 |
[@attrib='value'] | 주어진 속성에 주어진 값이 이쓴 모든 요소를 선택 |
[tag] | tag라는 자식이 있는 모든 요소를 선택. (직계만 가능) |
[.='text'] | 주어진 text를 포함한 하위 항목을 포함한 모든 요소를 선택 |
[tag='text'] | 주어진 text를 포함한 tag라는 자식이 있는 모든 요소를 선택 |
[position] | 주어진 위치에 있는 모든 요소를 선택. 앞에 태그 이름이 와야함 |
728x90
반응형
'Python' 카테고리의 다른 글
[Python] Remark (주석) (0) | 2021.06.06 |
---|---|
[Python] Type Cast (타입 변환) (0) | 2021.06.06 |
[Python] package installation (0) | 2021.06.06 |
[Python] PyCharm Install (0) | 2021.06.06 |
[Python] Python Install (0) | 2021.06.06 |
Comments