PythonでXMLを扱うにはxmltodict

Pocket

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>

基本

基本的な使い方は次のとおりです。

import xmltodict
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)

使い方は普通の辞書型のリストと同じです。
要素が複数ある場合はインデックスを指定します。

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"])

繰り返し

辞書型のリストなのでループを使って処理できます。

次のコードはareaの名前を出力します。

for area in dict["data"]["area"]:
  print(area["name"])

【出力結果】
東北地方
関東地方

次のコードはprefのなまえを出力します。

for area in dict["data"]["area"]:
  for pref in area["pref"]:
    print(pref["name"])

【出力結果】
青森県
宮城県
千葉県
神奈川県

[ 2022年1月26日 | カテゴリー: Python | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報