Python|XMLファイルを読み込む

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が活用されることが多く、基本を押さえておくと業務効率が大きく向上します。

タイトルとURLをコピーしました