Python XML 파싱하는 xmldataset 라이브러리 알아보기

오늘은 Python으로 xml 파싱하는 라이브러리인 xmldataset을 적용해보려 합니다.

xmldataset 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install xmldataset

pip로 xmldataset을 설치합니다.

예제

import xmldataset

xmldataset을 가져옵니다.

xml = """<?xml version="1.0"?>
  <site>
     <blog number="1">
        <article id="https://minwook-shin.github.io/">
           <author>minwook-shin</author>
           <url>http://minwook-shin.github.io/python-parsing-serializing-html-documents-using-html5lib/</url>
           <publish_date>2019-05-24T00:00:00+00:00</publish_date>
        </article>
        <article id="https://minwook-shin.github.io/">
           <author>minwook-shin</author>
           <url>http://minwook-shin.github.io/python-parse-and-build-css-using-cssutils/</url>
           <publish_date>2019-05-23T00:00:00+00:00</publish_date>
        </article>
        <article id="https://minwook-shin.github.io/">
           <author>minwook-shin</author>
           <url>http://minwook-shin.github.io/python-html-sanitization-text-linkification-using-bleach/</url>
           <publish_date>2019-05-22T00:00:00+00:00</publish_date>
        </article>
        <article id="https://minwook-shin.github.io/">
           <author>minwook-shin</author>
           <url>http://minwook-shin.github.io/python-iterating-searching-modifying-html-using-beautifulsoup/</url>
           <publish_date>2019-05-21T00:00:00+00:00</publish_date>
        </article>
     </blog>
  </site>"""

xmldataset으로 파싱할 xml 텍스트를 가져옵니다.

profile = """
site
    blog
        number     = external_dataset:blog_information
        article
            id     = dataset:blog_article,prefix:blog_article_
            author = dataset:blog_article,prefix:blog_article_
            url    = dataset:blog_article,prefix:blog_article_
            publish_date  = dataset:blog_article,name:date,prefix:blog_article_
            __EXTERNAL_VALUE__ = blog_information:number:blog_article"""

xmldataset으로 가져올 형식을 지정할 프로필도 작성합니다.

트리 형식으로 작성하면서 dataset과 external_dataset을 지정합니다.

추가적으로 prefix로 접두사, name으로 이름을 지정할 수 있습니다.

__EXTERNALVALUE_ 으로 article 레벨의 밖에 있는 외부 값을 가져올 수 있습니다.

result = xmldataset.parse_using_profile(xml, profile)

준비한 xml 텍스트를 profile 형식대로 파싱하여 result에 딕셔너리 형태로 반환합니다.

import pprint

pp = pprint.PrettyPrinter(indent=4).pprint

pp(result)

pprint으로 정리하여 출력하게 할 수 있습니다.

print(type(result))

result의 타입을 확인해보면 딕셔너리라고 확인할 수 있습니다.

Written on May 27, 2019