본문 바로가기
Programming/Python

12. XML (Extensible Markup Language)

by goatlab 2021. 12. 15.
728x90
반응형
SMALL

XML (Extensible Markup Language)

 

인터넷 웹페이지를 만드는 HTML을 획기적으로 개선하여 만든 언어이다. 홈페이지 구축기능, 검색기능 등이 향상되었고, 웹 페이지의 추가와 작성이 편리해졌다.

 

XML 만들기

 

from xml.etree.ElementTree import Element, dump

node1 = Element("first")
node1.text = "안녕"
dump(node1)
#결과
<first>안녕</first>
root.append(node1) # 노드에 노드 추가하기

node2 = Element("second")
node2.text = "Hello"
root.append(node2)

dump(root)
#결과
<xml><first>안녕</first><second>Hello</second></xml>
dump(root) # 속성 추가하기
#결과
<xml kind="language"><first>안녕</first><second>Hello
</second></xml>

 

XML 파싱

 

from xml.etree.ElementTree import parse
# getroot() 함수로 xml를 불러온 후 findall() 함수로 원하는 노드를 불러온다.
tree = parse('test.xml')
root = tree.getroot()

student = root.findall("student")

name = [x.findtext("name") for x in student]
age = [x.findtext("age") for x in student]
score = [x.find("score").attrib for x in student]

print(name)
print(age)
print(score)
['peter', 'elgar', 'hong']
['24', '21', '36']
[{'math': '80', 'english': '97'}, {'math': '67', 'english': '56'}, 
{'math': '76', 'english': '81'}]
tree = parse(‘파일명.xml’) # xml 파일 가져오기
root = tree.getroot() # root 노드 가져오기
root.findall("student") # 일치하는 모든 노드 가져오기
student.find("name") # 일치하는 첫 번째 노드 가져오기
--> <name>peter</name>

student.findtext("name") # 일치하는 첫 번째 노드의 값 가져오기
--> <name>peter</name>

student.findtext("score").attrib # 일치하는 첫 번째 노드의 속성 가져오기
--> <score math="76" english="81"/>

 

JSON 파싱

 

JSON (JavaScript Object Notation)은 속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.

 

import json #json을 다루기 위한 모듈
from collections import OrderedDict
from pprint import pprint #json을 좀 더 보기 편하게 출력

with open(‘test.json’, ‘r’) as f:
    data = json.load(f, object_pairs_hook=OrderedDict)

pprint(data)
#결과
OrderedDict([(‘student1’,
    OrderedDict([(‘age’, 24),
        (‘name’, ‘peter’),
        (‘score’,

OrderedDict([(‘math’, 80), (‘english’, 97)]))])),
        (‘student2’,
            OrderedDict([(‘age’, 21), (‘name’, ‘elgar’), (‘score’, 80)])),
        (‘student3’,
            OrderedDict([(‘age’, 36), (‘name’, ‘hong’), (‘score’, 80)]))])
728x90
반응형
LIST

'Programming > Python' 카테고리의 다른 글

14. 데이터베이스 (Database)  (0) 2021.12.15
13. 네트워크  (0) 2021.12.15
11. 파일 입출력  (0) 2021.12.15
10. 예외처리  (0) 2021.12.15
09. 모듈 (Module)  (0) 2021.12.08