XML解析

ここではPythonにおけるXML解析 (パース)を解説します。

DOM

DOMを用いて指定のXMLファイルを解析します。まずは下記のようなファイルを用意しましょう。

<?xml version="1.0" encoding="UTF-8"?>
<bookmark>
    <site>
        <name>google</name>
        <url>http://www.google.co.jp/</url>
    </site>
    <site>
        <name>yahoo</name>
        <url>http://www.yahoo.co.jp/</url>
    </site>
    <site>
        <name>python</name>
        <url>http://www.python-izm.com/</url>
    </site>
</bookmark>

次のような形で解析を行います。5行目から16行目でファイル内の全ての要素を出力し、20行目、21行目で指定の要素を取得しています。

import xml.dom.minidom

dom = xml.dom.minidom.parse('sample.xml')

print(dom.documentElement.tagName)
for node in dom.documentElement.childNodes:
    if node.nodeType == node.ELEMENT_NODE:
        print('  ' + node.tagName)

        for node2 in node.childNodes:
            if node2.nodeType == node2.ELEMENT_NODE:
                print('    ' + node2.tagName)

                for node3 in node2.childNodes:
                    if node3.nodeType == node3.TEXT_NODE:
                        print('      ' + node3.data)

print('-------------------------------------')

for url in dom.getElementsByTagName('url'):
    print(url.firstChild.data)
bookmark
  site
    name
      google
    url
      http://www.google.co.jp/
  site
    name
      yahoo
    url
      http://www.yahoo.co.jp/
  site
    name
      python
    url
      http://www.python-izm.com/
-------------------------------------
http://www.google.co.jp/
http://www.yahoo.co.jp/
http://www.python-izm.com/