파이썬에서 xml 원소의 특정 태그 검색하기
- Get link
- X
- Other Apps
by joviansummer
original STEEMIT post: https://steemit.com/blog/@joviansummer/7eced2-xml
우선, 파이썬에서 xml 파일을 읽는 방법은 이전 포스트를 참고하시기 바랍니다. 아래의 링크입니다.
위 포스트와 동일한 xml 파일을 가지고 원소 검색을 해 보겠습니다. test.xml 파일의 내용은 아래와 같습니다.
<?xml version="1.0"?>
<data>
<student name="Bob">
<math score="95"></math>
<physics score="90"></physics>
</student>
<student name="Alice">
<math score="91"></math>
<physics score="97"></physics>
</student>
</data>
이 xml 파일을 읽어서 원소 트리(element tree)의 루트를 가져옵니다.
import xml.etree.ElementTree as ET
test_tree = ET.parse('test.xml')
root = ET.getroot()
이제 몇가지 검색을 해 볼 수 있습니다. find() 또는 findall() 함수를 이용합니다. find() 함수는 조건에 맞는 첫번째 원소 하나만 가져오고, findall() 함수는 조건에 맞는 모든 원소를 리스트(list) 형식으로 가져옵니다.
루트의 바로 하위에 student 태그를 가진 원소를 찾아서 속성을 출력하고 싶다면 아래와 같이 할 수 있습니다.
first_student = root.find('./student')
print(first_student.attrib)
print(first_student[0].tag, first_student[0].attrib)
{'name': 'Bob'}
math {'score': '95'}
student 태그를 가진 원소를 모두 찾아서 속성을 출력하려면 아래와 같이 할 수 있습니다. findall() 함수를 사용했으니 결과는 리스트 형태이므로 for 반복문을 이용합니다.
all_students = root.findall('./student')
for item in all_students:
print(item.attrib)
{'name': 'Bob'}
{'name': 'Alice'}
학생의 수학 점수를 찾고 싶다면 아래와 같이 할 수 있겠습니다. student 태그 하위에 있는 math 태그를 찾습니다.
first_math_score = root.find('./student/math')
print(first_math_score.attrib)
{'score': '95'}
루트 하위 전체 범위에서 검색하고 싶을 경우에는 아래와 같이 할 수 있습니다. physics 태그를 찾는 경우입니다.
physics_score_list = root.findall('.//physics')
for item in physics_score_list:
print(item.tag, item.attrib)
physics {'score': '90'}
physics {'score': '97'}
@joviansummer의 스팀 프로젝트
스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다.
(https://steemitwallet.com/~witnesses)
jsup 서비스에 큐레이션 보상 분배 기능이 추가되었습니다.
jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기
Posted through the AVLE Dapp (https://avle.io)
- Get link
- X
- Other Apps
Comments
Post a Comment