PythonでXMLを読み込む方法とは?初心者向けに基礎から解説
こんにちは、とまだです。
XMLファイルを扱うとき、「どうやって読み込めばいいんだろう」と悩んだことはありませんか?
実はPythonには、XMLを簡単に扱える便利な機能が標準で備わっているんです。
今回は、XMLパーサーの基本的な使い方から実務で使えるテクニックまで、初心者の方にもわかりやすく解説します。
XMLとは?身近な例で理解しよう
XMLは、データを階層的に整理できるファイル形式です。
例えば、本棚を想像してみてください。
本棚には複数の段があり、各段には本が並んでいますよね。
XMLも同じように、親要素の中に子要素を入れて、データを整理整頓できるんです。
<bookshelf>
<book>
<title>Python入門</title>
<author>山田太郎</author>
</book>
</bookshelf>
このように、見た目でも階層構造が分かりやすいのが特徴です。
システム間でデータをやり取りするときによく使われます。
設定ファイルやWebサービスとの通信でも活躍しているんですよ。
PythonでXMLを扱う3つの方法
PythonでXMLを読み込む方法は主に3つあります。
それぞれに特徴があるので、用途に合わせて選ぶといいでしょう。
1. ElementTree:シンプルで使いやすい
ElementTreeは、Pythonに標準で入っている機能です。
追加のインストールなしですぐに使えるのが嬉しいポイントですね。
基本的な使い方を見てみましょう。
import xml.etree.ElementTree as ET
# XMLファイルを読み込む
tree = ET.parse("sample.xml")
root = tree.getroot()
# ルート要素のタグ名を確認
print(root.tag)
このコードでは、XMLファイルを読み込んで、一番上の要素(ルート要素)を取得しています。
特定の要素を探すことも簡単です。
# bookタグの中のtitleタグを探す
title = root.find("book/title")
if title is not None:
print(title.text)
find()
メソッドを使えば、パス指定で目的の要素にアクセスできます。
初めてXMLを扱う方には、ElementTreeから始めることをおすすめします。
2. minidom:DOM形式でアクセス
minidomも標準ライブラリの一つです。
DOMという考え方でXMLを扱います。
from xml.dom import minidom
# XMLファイルを読み込む
dom = minidom.parse("sample.xml")
# タイトル要素をすべて取得
titles = dom.getElementsByTagName("title")
for title in titles:
print(title.firstChild.nodeValue)
getElementsByTagName()
で、同じタグ名の要素をまとめて取得できます。
ElementTreeより少しコードが長くなりますが、使い慣れた方には扱いやすいかもしれません。
3. lxml:高機能な外部ライブラリ
lxmlは外部ライブラリですが、XPathという強力な検索機能が使えます。
大規模なXMLや複雑な検索が必要な場合に便利です。
from lxml import etree
# 文字列からXMLを作る
xml_data = """<root>
<book>
<title>Python入門</title>
</book>
</root>"""
root = etree.fromstring(xml_data)
# XPathで検索
titles = root.xpath("//title")
for title in titles:
print(title.text)
xpath()
メソッドで柔軟な検索ができるのが魅力です。
ただし、別途インストールが必要な点は注意してくださいね。
実際の活用シーンを見てみよう
XMLパーサーはどんな場面で役立つのでしょうか。
実務でよくある例をいくつか紹介します。
設定ファイルの読み込み
アプリケーションの設定をXMLで管理することがあります。
データベースの接続情報やアプリの動作設定などですね。
# config.xmlから設定を読み込む
tree = ET.parse("config.xml")
root = tree.getroot()
# データベース接続情報を取得
db_host = root.find("database/host").text
db_port = root.find("database/port").text
設定値を変数に読み込んで、プログラムで使用できます。
ソースコードを変更せずに設定を変えられるので便利ですよ。
外部システムとのデータ連携
他のシステムからXML形式でデータを受け取ることもあります。
受け取ったデータを解析して、自分のシステムで使える形に変換します。
# 受け取ったXMLを解析
tree = ET.parse("received_data.xml")
root = tree.getroot()
# 商品情報を取り出す
for product in root.findall("product"):
name = product.find("name").text
price = product.find("price").text
# データベースに保存する処理など
XMLの構造さえ分かれば、必要な情報を取り出すのは難しくありません。
バッチ処理での一括処理
定期的に大量のXMLファイルを処理する場合もあります。
Pythonスクリプトで自動化すれば、手作業の時間を大幅に削減できます。
import os
import glob
# XMLファイルを一括で処理
xml_files = glob.glob("data/*.xml")
for xml_file in xml_files:
tree = ET.parse(xml_file)
# 各ファイルの処理
フォルダ内のXMLファイルをまとめて処理できるので効率的です。
よくあるエラーと対処法
XMLを扱っていると、いくつかのエラーに遭遇することがあります。
初心者がつまずきやすいポイントを見ていきましょう。
タグが正しく閉じられていない
XMLはタグの開始と終了が対になっている必要があります。
<!-- NG例 -->
<book>
<title>Python入門
</book>
<!-- OK例 -->
<book>
<title>Python入門</title>
</book>
タグの閉じ忘れは意外と多いミスです。
エディタの構文チェック機能を使うと防げますよ。
文字コードの不一致
XMLファイルの宣言部分と実際の文字コードが違うとエラーになります。
<?xml version="1.0" encoding="UTF-8"?>
ファイルの先頭にある宣言を確認してみてください。
通常はUTF-8で統一するのがおすすめです。
名前空間の扱い
実務のXMLでは名前空間が使われることがあります。
<root xmlns="http://example.com">
<book>タイトル</book>
</root>
名前空間がある場合、検索方法が少し変わります。
# 名前空間を指定して検索
ns = {"ex": "http://example.com"}
book = root.find("ex:book", ns)
最初は戸惑うかもしれませんが、慣れれば大丈夫です。
XMLを編集して保存する
読み込んだXMLを編集して、ファイルに保存することもできます。
新しい要素を追加する例を見てみましょう。
tree = ET.parse("sample.xml")
root = tree.getroot()
# 新しい要素を作成
new_book = ET.Element("book")
title = ET.SubElement(new_book, "title")
title.text = "新しい本"
# ルート要素に追加
root.append(new_book)
# ファイルに保存
tree.write("updated.xml", encoding="utf-8")
要素の追加、削除、値の変更など、さまざまな編集が可能です。
元のファイルを上書きしないよう、バックアップを取っておくといいですね。
大きなXMLファイルを効率的に処理する
数GBもあるような巨大なXMLファイルはどう扱えばいいでしょうか。
すべてメモリに読み込むと、パソコンが重くなってしまいます。
そんなときは、iterparseを使った逐次処理が役立ちます。
# 大きなファイルを少しずつ処理
for event, elem in ET.iterparse("large.xml", events=("end",)):
if elem.tag == "book":
# bookタグの処理
title = elem.find("title").text
print(title)
# メモリを解放
elem.clear()
必要な部分だけを処理して、すぐにメモリから削除します。
これなら大きなファイルでも安定して処理できますね。
まとめ
PythonでXMLを扱う方法について解説しました。
標準ライブラリのElementTreeから始めて、必要に応じて他の方法も試してみてください。
XMLパーサーを使いこなせるようになると、さまざまなシステムとの連携がスムーズになります。
設定ファイルの管理やデータ変換など、実務で活躍する場面も多いはずです。
最初は難しく感じるかもしれませんが、基本的な使い方を覚えれば応用も効きます。
ぜひ実際にコードを書いて、XMLパーサーの便利さを体験してみてくださいね。
著者について

とまだ
フルスタックエンジニア
Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →