Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 39080
- BOJ
- 10597
- 문서자동화
- 줄어드는 숫자
- 위클리 챌린지
- 재귀
- 백트래킹
- dfs
- 백트렉킹
- 좋은 수열
- 입실 퇴실
- 코딩테스트
- 부분 수열의 합
- openssl
- 1174
- 백트랙킹
- Java
- 복서 정렬하기
- BFS
- 완전 탐색
- 프로그래머스
- 순열장난
- DP
- ElementTree
- 위클리 6주차
- 너비우선탐색
- 몯느 순열
- 백준
- 그래프
Archives
개발자-H 입니다.
XML 요소 분석하기. (ElementTree) 본문
XML은 데이터를 표현 하는 여러 방식 중 하나이다.
- 데이터 표현 방식으로 CSV, JSON과 같은 방식이 있다.
- XML은 하나의 텍스트 파일이며 원하는 데이터를 얻기 위해 파싱 및 가공의 과정을 거친다. (Deserialize)
- 다음의 XML에서 Member 객체를 파싱하여 데이터를 가공해보자.
<?xml version="1.0"?>
<doc>
<assembly>
<name>DocumentationApp</name>
</assembly>
<members>
<member name="M:StudyApp.Model.Book.#ctor(System.DateTime,StudyApp.Model.BookType,System.String)">
<summary>
책을 생성합니다.
1) 요약 1
2) 요약 2
3) 요약 3
4) 요약 4
5) 요약 5
</summary>
<param name="createdTime" type="DateTime">생성 일자</param>
<param name="type" type="BookType">종류</param>
<param name="title" type="string">이름</param>
<code>
var game = new Book(DateTime.Now, BookType.Game, "Diablo II");
var history = new Book(DateTime.Now, BookType.History, "Korea");
</code>
</member>
</members>
</doc>
- XML 파싱을 위해 lxml를 설치한다.
pip install lxml
- XML 텍스트 파일을 파싱한다.
from lxml import etree
import xml.etree.ElementTree as elemTree
parser = etree.XMLParser(remove_blank_text=True)
tree = elemTree.parse('docs.xml', parser=parser)
root = tree.getroot()
- XML 데이터 중 Member 요소를 가져온다.
for member_item in root.iter('member'):
# member 요소의 attribute 출력
print(member_item.attrib)
- Member 하위 요소 중 Summary 요소를 찾아 출력한다.
for member_item in root.iter('member'):
# member 요소의 attribute 출력
print(member_item.attrib)
for summary_item in member_item.findall('summary'):
print(summary_item.text)
# 결과
{'name': 'M:StudyApp.Model.Book.#ctor(System.DateTime,StudyApp.Model.BookType,System.String)'}
책을 생성합니다.
1) 요약 1
2) 요약 2
3) 요약 3
4) 요약 4
5) 요약 5
- 얻은 데이터의 공백 상태가 마음에 들지 않는다.
- strip()를 사용하여 공백 문자를 제거한다.
for member_item in root.iter('member'):
# member 요소의 attribute 출력
print(member_item.attrib)
for summary_item in member_item.findall('summary'):
# 문자열 후처리
for line in summary_item.text.splitlines():
print(line.strip())
{'name': 'M:StudyApp.Model.Book.#ctor(System.DateTime,StudyApp.Model.BookType,System.String)'}
책을 생성합니다.
1) 요약 1
2) 요약 2
3) 요약 3
4) 요약 4
5) 요약 5
- 각 요소의 Attribute 속성은 attrib 속성으로 iterable 할 수 있다.
for member_item in root.iter('member'):
for param_item in member_item.findall('param'):
for param_attribute_item in param_item.attrib:
print('name : ', param_attribute_item, 'type : ', param_item.attrib[param_attribute_item])
name : name type : createdTime
name : type type : DateTime
name : name type : type
name : type type : BookType
name : name type : title
name : type type : string
Comments