프로그래밍/Python

파이썬으로 XML파일 파싱해서 사용하기

Dibrary 2022. 7. 18. 09:50
반응형

안녕하세요 Dibrary입니다.

이번에는 파이썬으로 XML파일을 파싱해보겠습니다.

XML파일은 JSON파일과 마찬가지로 설정하는 부분에서 굉장히 많이 쓰이고, 또 각종 산업 현장에서 태그들을 XML파일로 정의해서 쓰거나, 로그를 XML꼴로 저장하기도 합니다.

이럴 경우 airflow를 사용해서 해당 파일을 파싱하게 해서 정리하면 꽤 유용합니다.

 


파이썬은 Jupyter를 사용하고, XML파일은 임의로 아래와 같은 파일을 만들었습니다. (실제 플랜트 산업에서 쓰는 것과 같진 않지만, 유사하게 말이죠)

참고로 저는 파일 이름을 sample.xml 이라고 지었습니다. 

 

xml을 파싱하려면 lxml 모듈이 있어야 합니다. 늘 그렇듯, pip install lxml을 하시면 자동으로 설치가 됩니다.

먼저 root의 태그를 확인해 보았습니다.

바로 위 xml파일에서 볼 수 있듯, tags가 맞게 나오는 걸 볼 수 있습니다.

 

그러면 root 태그 밑에는 어떤 태그가 있을까요?

getchildren 메서드를 사용해서 for문으로 어떤 태그들이 있는지 확인해 보았습니다.

 

우선 name이라는 태그를 살펴보겠습니다. name태그에는 어떤 글자가 있는 걸까요.

text로 확인해보니 PL1이라는 글자가 들어있었네요. 

 

오 그러면 이 방법으로 다른 것들도 다 확인이 가능하겠네? 라고 생각하시면 안 됩니다.

members는 안나오네요. 왜 그러냐면, XML파일에서 members 밑에 member태그로 각각 구성되어있기 때문입니다.

그러면 이런 생각을 하시면 됩니다.

  1. 루트 태그의 자식태그를 가져올 때 getchildren을 썼었지.
  2. 태그의 값을 가져올 때 text를 사용했었지.

네 이 2가지를 동시에 사용하니 원하는 값이 나오는 것을 볼 수 있습니다.

 

나머지도 위와 같은 방법으로 가져올 수 있는데, 이번에는 order에 해당되는 것을 가져와보겠습니다.

사실 위 데이터들은 모두 order 정보가 다르기 때문에 각각 확인해보겠습니다.

우선 status의 자식노드들에서 [0]번째 태그의 order값을 가져온 것입니다.

두 번째는 status의 자식노드들에서 [1]번째 태그의 order값을 가져온 것입니다. XML파일에 있는 순서와 같죠?

이 indexing을 for문을 돌면서 확인해도 됩니다.

728x90
반응형