PythonでXMLを扱うにはxmltodict
PythonでXMLを使う場合、通常はElementTreeを使います。
しかし初心者には使い方がわかりにくいです。
そんな場合はxmltodictを使うとよいです。
Pythonだと馴染みのあるJSONや辞書型と同じように使えます。
次のようにインストールして使います。
pip install xmltodict
XMLのサンプル
サンプルを使って説明します。
<data>
<area>
<name>東北地方</name>
<pref>
<name>青森県</name>
<city>青森市</city>
</pref>
<pref>
<name>宮城県</name>
<city>仙台市</city>
</pref>
</area>
<area>
<name>関東地方</name>
<pref>
<name>千葉県</name>
<city>千葉市</city>
</pref>
<pref>
<name>神奈川県</name>
<city>横浜市</city>
</pref>
</area>
</data>
<area>
<name>東北地方</name>
<pref>
<name>青森県</name>
<city>青森市</city>
</pref>
<pref>
<name>宮城県</name>
<city>仙台市</city>
</pref>
</area>
<area>
<name>関東地方</name>
<pref>
<name>千葉県</name>
<city>千葉市</city>
</pref>
<pref>
<name>神奈川県</name>
<city>横浜市</city>
</pref>
</area>
</data>
基本
基本的な使い方は次のとおりです。
import xmltodict
fn = "sample.xml"
with open(fn) as f:
xml_text = f.read()
dict = xmltodict.parse(xml_text)
fn = "sample.xml"
with open(fn) as f:
xml_text = f.read()
dict = xmltodict.parse(xml_text)
これでdictという変数にXMLが順序付き辞書型としてセットされます。
順序付きですが普通の辞書型と同じように使えます。
次のようにすると変数にどのようにセットされたか分かります。
pprintは整形された状態で出力するために使っています。
import xmltodict
import pprint
pprint.pprint(dict)
import pprint
pprint.pprint(dict)
使い方は普通の辞書型のリストと同じです。
要素が複数ある場合はインデックスを指定します。
pprint.pprint(dict["data"])
pprint.pprint(dict["data"]["area"])
pprint.pprint(dict["data"]["area"][0])
pprint.pprint(dict["data"]["area"][0]["pref"][0])
pprint.pprint(dict["data"]["area"][0]["pref"][0]["name"])
pprint.pprint(dict["data"]["area"])
pprint.pprint(dict["data"]["area"][0])
pprint.pprint(dict["data"]["area"][0]["pref"][0])
pprint.pprint(dict["data"]["area"][0]["pref"][0]["name"])
繰り返し
辞書型のリストなのでループを使って処理できます。
次のコードはareaの名前を出力します。
for area in dict["data"]["area"]:
print(area["name"])
print(area["name"])
【出力結果】
東北地方
関東地方
次のコードはprefのなまえを出力します。
for area in dict["data"]["area"]:
for pref in area["pref"]:
print(pref["name"])
for pref in area["pref"]:
print(pref["name"])
【出力結果】
青森県
宮城県
千葉県
神奈川県
[ 2022年1月26日 | カテゴリー: Python | タグ: XML , xmltodict ]
« MarkdownをPDFに変換する拡張機能「Markdown PDF」 | センバツには地域格差があり西日本が圧倒的に有利 »
コメントを残す