1. はじめに
本記事では、「Python|XMLファイルを読み込む」方法について、初心者にもわかりやすく解説します。
XML(Extensible Markup Language)は、データを階層構造で表現するための形式で、設定ファイルやデータ交換フォーマットとしてよく使われています。Pythonでは、XMLを解析・操作するための便利な標準ライブラリが用意されており、実務やデータ処理に活用できます。
この記事では、xml.etree.ElementTree
を使ってXMLファイルを読み込む基本から、具体的なコード例・応用パターン・エラー対策まで幅広く紹介します。
2. PythonでXMLファイルを読み込む基本
2-1. ElementTreeモジュールとは?
Pythonの標準ライブラリであるxml.etree.ElementTree
(略してElementTree
)は、XMLデータを簡単に読み書き・操作できるライブラリです。外部ライブラリのインストールは不要で、Pythonに標準で組み込まれています。
2-2. 基本的なXML読み込みコード
まずは簡単なXMLファイルを用意し、それを読み込んで中身を表示する基本コードを見てみましょう。
サンプルXMLファイル(sample.xml):
<data>
<user id="1">
<name>田中太郎</name>
<age>30</age>
</user>
<user id="2">
<name>鈴木花子</name>
<age>25</age>
</user>
</data>
Pythonコード:
import xml.etree.ElementTree as ET
# XMLファイルを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()
# ルート要素のタグを表示
print(f"ルートタグ: {root.tag}")
# ユーザー情報を表示
for user in root.findall('user'):
user_id = user.get('id') # 属性値の取得
name = user.find('name').text
age = user.find('age').text
print(f"ID: {user_id}, 名前: {name}, 年齢: {age}")
実行結果:
ルートタグ: data
ID: 1, 名前: 田中太郎, 年齢: 30
ID: 2, 名前: 鈴木花子, 年齢: 25
このように、ElementTree
を使うと簡単にXML構造を解析して、要素や属性を取得できます。
3. よくある使い方・応用例
3-1. ネストされた要素の読み込み
XMLファイルの構造がさらに深い場合でも、同様の方法で読み取ることが可能です。
例:入れ子になった構造
<library>
<book>
<title>Python入門</title>
<author>山田一郎</author>
<publisher>
<name>技術評論社</name>
<year>2023</year>
</publisher>
</book>
</library>
tree = ET.parse('library.xml')
root = tree.getroot()
for book in root.findall('book'):
title = book.find('title').text
author = book.find('author').text
publisher_name = book.find('publisher/name').text
year = book.find('publisher/year').text
print(f"{title}(著: {author}), 出版社: {publisher_name}({year}年)")
実行結果:
Python入門(著: 山田一郎), 出版社: 技術評論社(2023年)
3-2. XML文字列を直接読み込む
ファイルではなく、文字列としてXMLを扱う場合にはET.fromstring()
を使います。
xml_str = """
<person>
<name>佐藤健</name>
<age>28</age>
</person>
"""
root = ET.fromstring(xml_str)
print(root.find('name').text)
実行結果:
佐藤健
4. 注意点・エラー対策
4-1. ファイルが存在しない場合
ET.parse()
で読み込むファイルが存在しないと、FileNotFoundError
が発生します。
try:
tree = ET.parse('not_found.xml')
except FileNotFoundError:
print("ファイルが見つかりません")
実行結果:
ファイルが見つかりません
4-2. 不正なXML形式の処理
XMLの構文に誤りがある場合、ET.ParseError
が発生します。
invalid_xml = "<root><tag>不正</root>" # 閉じタグが不一致
try:
root = ET.fromstring(invalid_xml)
except ET.ParseError as e:
print(f"パースエラー: {e}")
実行結果:
パースエラー: mismatched tag: line 1, column 22
4-3. 名前空間(namespace)に注意
XMLで名前空間(xmlns)が使われていると、通常のfind()
では取得できません。名前空間の扱いには{名前空間}タグ名
のような書き方が必要です。
例:<ns:tag xmlns:ns="http://example.com/ns">
のようなXML
5. まとめ
- Pythonの
xml.etree.ElementTree
を使えば、XMLファイルを簡単に読み込み・解析できます。 - タグや属性、階層構造のあるデータにも柔軟に対応可能です。
- エラー対策として、ファイルの存在確認や構文チェックも重要です。
実務では、設定ファイルの読み取り、外部システムとのデータ連携(APIやRSSなど)でXMLが活用されることが多く、基本を押さえておくと業務効率が大きく向上します。