PythonでのXML処理を徹底解説|標準ライブラリからlxmlまで完全ガイド

1. はじめに

Pythonは、さまざまなデータ形式を簡単に扱える柔軟なプログラミング言語です。中でも、XML(Extensible Markup Language)は構造化データの交換や保存によく使用され、APIのレスポンスや設定ファイルに幅広く利用されています。Pythonでは、標準ライブラリや外部ライブラリを使ってXMLを簡単に操作することができます。この記事では、Pythonを使ったXMLの基本操作から応用までを分かりやすく解説します。

2. PythonでXMLを扱うライブラリの紹介

2.1 標準ライブラリ:xml.etree.ElementTree

Pythonの標準ライブラリであるxml.etree.ElementTreeは、XMLファイルの読み込み、書き出し、ツリー構造の探索や編集を簡単に行える便利なツールです。

  • パースの基本: import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() print(root.tag) # 出力: "data" このコードでは、data.xmlというXMLファイルを読み込み、ルート要素のタグを表示します。出力結果が「data」であることを確認できます。
  • ファイルが存在しない場合のエラーハンドリング:
    ファイルが存在しない場合はFileNotFoundErrorが発生するため、次のように例外処理を追加できます。
    try: tree = ET.parse('data.xml') root = tree.getroot() except FileNotFoundError: print("ファイルが見つかりません。")

2.2 外部ライブラリ:lxml

高度なXML操作が必要な場合には、lxmlライブラリが推奨されます。lxmlは、XPathやXSLTを使用した強力なXML処理をサポートしており、標準ライブラリでは実現が難しい操作を簡単に行うことができます。

  • XPathを使った要素の取得:
    from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country[@name="Liechtenstein"]') print(countries[0].tag) # 出力: "country"
    このコードでは、name属性が「Liechtenstein」であるcountry要素を取得します。

3. XMLのパースと操作

3.1 基本的なパース手順

XMLファイルをパースしてツリー構造を操作するには、xml.etree.ElementTreeparse()を使用します。このメソッドでXMLファイルを読み込み、ツリーのルート要素を取得します。

  • ファイルからのパース:
    import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot() print(root.tag) # 出力: "rootTag"
    このコードでは、XMLファイルexample.xmlを読み込み、ルート要素のタグ名を表示します。

3.2 要素の検索と属性の操作

XML要素の検索には、find()findall()を使用します。これにより、特定の要素や属性を簡単に取得できます。

  • 要素の検索と属性の取得: country = root.find('country') print(country.get('name')) # 出力: "Liechtenstein"
  • 属性の操作:
    XML要素の属性を操作するには、get()で取得し、set()で設定します。
    country.set('currency', 'CHF') print(country.attrib) # 出力: {'name': 'Liechtenstein', 'currency': 'CHF'}

4. XMLの編集と保存

4.1 要素の編集方法

XML要素のテキストや属性を変更することで、XMLの内容を編集できます。たとえば、要素のテキストを変更する際には次のように行います。

  • 要素のテキスト編集:
    rank = root.find('.//rank') rank.text = '2' print(rank.text) # 出力: "2"

4.2 XMLファイルへの書き出し

変更後のXMLをファイルに保存するには、write()メソッドを使用します。

  • XMLの保存:
    tree.write('updated_data.xml')

5. 外部ライブラリでの応用処理

5.1 lxmlを使った高度なXML操作

lxmlライブラリを使用すると、XPathを利用した複雑な検索や、XSLTを使用してXMLを他の形式に変換することができます。

  • XPathを使った要素の検索:
    from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country') for country in countries: print(country.get('name'))

5.2 XSLTを使ったXMLの変換

XSLTを使用してXMLをHTMLに変換する例を紹介します。

  • XMLからHTMLへの変換:
    from lxml import etree xml_tree = etree.parse('data.xml') xsl_tree = etree.parse('style.xsl') transform = etree.XSLT(xsl_tree) result_tree = transform(xml_tree) result_tree.write('output.html', pretty_print=True)

6. 実践:サンプルコードと解説

6.1 XMLからデータを抽出する例

XMLファイルからデータを抽出し、特定の情報を表示するサンプルコードです。

  • サンプルコード: import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() for country in root.findall('country'): name = country.get('name') rank = country.find('rank').text print(f"Country: {name}, Rank: {rank}")

6.2 XMLを編集して保存する例

XML要素の値を編集し、変更した内容を保存するサンプルコードです。

  • サンプルコード: import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() rank = root.find('.//rank') rank.text = '2' tree.write('updated_data.xml')

7. まとめ

PythonでXMLを扱う際、標準ライブラリのxml.etree.ElementTreeを使うことで基本的なXML操作が簡単に行えます。さらに、lxmlを使うことで、XPathやXSLTなどの高度な操作が可能です。記事内で紹介したコードを参考にしながら、実際にXMLを操作してみてください。