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.ElementTree
のparse()
を使用します。このメソッドで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を操作してみてください。