PythonのElementTreeを使ってXMLをパースする方法

Python2.5から、ElementTreeというlibraryが用意されています。これを使うと、容易にXMLのパースができます。(xml.etree.ElementTree — The ElementTree XML API — Python v2.7.1 documentation)

例) XMLファイルを読み込み、辞書型の変数に変換する

--- page.xml ---

<?xml version="1.0" encoding="UTF-8"?>
<page version="1.0">
    <base>
        <title>Test</title>
        <description>Description</description>
    </base>
    <items>
        <item type="type1">
            <name>Item1</name>
            <price>2000</price>
        </item>
        <item type="type2">
            <name>Item2</name>
            <price>2300</price>
        </item>
    </items>
</page>
--- xml_test.py ---

# encoding: utf-8
from xml.etree import ElementTree

def parse_xml():
    page = {}
    f = open("page.xml", "r")
    try: 
        tree = ElementTree.parse(f)
        page["version"] = tree.getroot().get("version")
        page["base"] = {
                "title": tree.find("base").find("title").text,
                "description": tree.find("base").findtext("description"),
        }
        page["items"] = []
        for item in tree.find("items").getiterator("item"):
            page["items"].append({
                    "name": item.findtext("name"),
                    "price": item.findtext("price"),
                    "type": item.get("type"),
            })
        print("PAGE: " + str(page))
    finally:
        f.close()
if __name__ == "__main__":
    parse_xml()

使っているメソッドは以下の通りです。

  • getroot(): ルート要素を取得
  • get(): 引数に指定した属性の値を取得
  • find(): 引数で指定した要素を取得
  • text: 要素のテキストを取得
  • findtext(): 引数で指定した要素のテキストを取得
  • getiterator(): 引数で指定した要素をlistで取得

この記事が役に立った場合、シェアしていただけると励みになります!!