Pythonでは、XML(Extensible Markup Language)形式のデータを簡単に扱うためのライブラリがいくつか用意されています。この記事では、標準ライブラリである xml.etree.ElementTree
を使って、XMLの読み込み・検索・追加・削除・書き出しまでの基本操作を解説します。
「XML」とは?
「XML(Extensible Markup Language)」とは、テキストデータを元にした形式であり、汎用的なフォーマットとして広く普及しています。設定ファイルやデータのやり取り(APIレスポンスなど)によく使用されます。
スクレイピングした情報を解析する場合には「BeautifulSoup」を用いることが可能です。
例:sample.xml
<data>
<user id="1">
<name>山田太郎</name>
<email>taro@example.com</email>
</user>
<user id="2">
<name>鈴木花子</name>
<email>hanako@example.com</email>
</user>
</data>
「XML」を用いた使用例
以下のプログラムは予め保存した「XML」データを用意して、そのデータを解析して出力する内容となっています。
基本:XMLの読み込み
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
print(root.tag)
結果
data
要素の検索
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
for user in root.findall('user'):
name = user.find('name').text
email = user.find('email').text
user_id = user.get('id')
print(f"{user_id}: {name} - {email}")
結果
1: 山田太郎 - taro@example.com
2: 鈴木花子 - hanako@example.com
要素の追加
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
new_user = ET.Element('user', id='3')
ET.SubElement(new_user, 'name').text = '田中一郎'
ET.SubElement(new_user, 'email').text = 'ichiro@example.com'
root.append(new_user)
要素の削除
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
for user in root.findall('user'):
if user.get('id') == '1':
root.remove(user)
XMLファイルに書き出す
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
tree.write('updated_sample.xml', encoding='utf-8', xml_declaration=True)
応用:文字列としてパース
import xml.etree.ElementTree as ET
xml_string = '''
<item>
<title>記事タイトル</title>
<url>https://example.com</url>
</item>
'''
root = ET.fromstring(xml_string)
print(root.find('title').text)
結果
記事タイトル
まとめ
操作内容 | メソッド例 |
---|---|
読み込み | ET.parse() 、ET.fromstring() |
ルート取得 | .getroot() |
検索 | .find()、 .findall() |
追加 | ET.SubElement() |
削除 | .remove() |
書き出し | .write() |
こんな方におすすめ
- XML形式の設定ファイルやデータを扱う方
- APIレスポンスがXMLのシステムを触る方
- JSONと並んで構造化データを習得したい方
おまけ:JSONとの違い
特徴 | XML | JSON |
---|---|---|
構文 | タグベース | キーと値のペア |
可読性 | やや複雑 | シンプル |
利用シーン | 古いシステム / デバイス間通信など | Web APIやJavaScript全般 |