工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

PythonでXMLパースをマスター:minidomとElementTreeの実践ガイド

XMLとは

XML(eXtensible Markup Language)は、構造化データを効率的に保存・転送するために作られました。システムやアプリケーション間の情報交換に広く用いられています。

PythonにはXMLドキュメントのパースと操作のための堅牢なライブラリがあります。ただし、XMLファイルをパースするには、ドキュメント全体をまずメモリに読み込む必要があります。このチュートリアルでは、Pythonのxml.dom.minidomとxml.etree.ElementTreeモジュールを用いて、XMLファイルの読み取り、検査、変更を行う方法を示します。

このガイドを読み終えると、以下ができるようになります:

minidomでのXMLパース

従業員データを含むサンプルXMLファイルから始めます。ファイルは以下のような構造です:

ステップ1) ファイルには従業員の名、姓、自宅、専門分野(SQL、Python、Testing、Business)が列挙されています。

PythonでXMLパースをマスター:minidomとElementTreeの実践ガイド

ステップ2) ドキュメント読み込み後、ルート要素のnodeNameと最初の子要素のtagNameを出力。これらはDOMオブジェクトの標準プロパティです。

PythonでXMLパースをマスター:minidomとElementTreeの実践ガイド

注: nodeNameとtagNameの値はXML DOM命名規則に従うため、XMLに慣れていない場合は unfamiliar に感じるかもしれません。

ステップ3) ドキュメントから全スキルのリストを抽出。以下のコードでスキル名をセットに収集する方法を示します。

PythonでXMLパースをマスター:minidomとElementTreeの実践ガイド

新しいXMLノードの作成

既存のXML構造に新しいデータを追加するのはminidomで簡単です。例として、expertiseノード「BigData」を追加します。

  1. createElement("expertise")で新しい要素を作成し、name属性を設定。
  2. ドキュメントのルート子要素に新しい要素を追加。

PythonでXMLパースをマスター:minidomとElementTreeの実践ガイド

XMLパーサー例

Python 2の例

import xml.dom.minidom
def main():
    # XMLファイルを読み込みパース
    doc = xml.dom.minidom.parse("Myxml.xml")
    # ルート情報を出力
    print doc.nodeName
    print doc.firstChild.tagName
    # 既存のexpertiseエントリを列挙
    expertise = doc.getElementsByTagName("expertise")
    print "%d expertise:" % expertise.length
    for skill in expertise:
        print skill.getAttribute("name")
    # 新しいexpertiseエントリを追加
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print " "
    # 追加を検証
    expertise = doc.getElementsByTagName("expertise")
    print "%d expertise:" % expertise.length
    for skill in expertise:
        print skill.getAttribute("name")
if __name__ == "__main__":
    main()

Python 3の例

import xml.dom.minidom
def main():
    # XMLファイルを読み込みパース
    doc = xml.dom.minidom.parse("Myxml.xml")
    # ルート情報を出力
    print(doc.nodeName)
    print(doc.firstChild.tagName)
    # 既存のexpertiseエントリを列挙
    expertise = doc.getElementsByTagName("expertise")
    print("%d expertise:" % expertise.length)
    for skill in expertise:
        print(skill.getAttribute("name"))
    # 新しいexpertiseエントリを追加
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print(" ")
    # 追加を検証
    expertise = doc.getElementsByTagName("expertise")
    print("%d expertise:" % expertise.length)
    for skill in expertise:
        print(skill.getAttribute("name"))
if __name__ == "__main__":
    main()

ElementTreeでのXMLパース

ElementTreeは、XML操作をシンプルかつPythonicにする軽量APIです。フルDOMのオーバーヘッドなしで大規模XMLファイルを読み取るのに適しています。

サンプルXMLデータ:

<data>
  <items>
    <item name="expertise1">SQL</item>
    <item name="expertise2">Python</item>
  </items>
</data>

ElementTreeでのXML読み取り:

まずモジュールをインポート:

import xml.etree.ElementTree as ET

ファイルをパースしルート要素を取得:

tree = ET.parse('items.xml')
root = tree.getroot()

全スキル名を表示する完全なコード:

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()
print('Expertise Data:')
for elem in root:
    for subelem in elem:
        print(subelem.text)

出力:

Expertise Data:
SQL
Python

まとめ

Pythonのxml.dom.minidomとxml.etree.ElementTreeモジュールは、開発者がXMLドキュメントを効率的に読み込み、分析、変更できるようにします。minidomは複雑な操作に適したフルDOM表現を提供し、ElementTreeはシンプルなパースと抽出に適した軽量な代替手段です。


Python

  1. PythonファイルI/O:ファイル操作、読み書き、管理のマスター
  2. Python strip()メソッド完全ガイド:実践例付き
  3. Python len()関数:オブジェクトの長さを測る実践ガイド
  4. Python yieldをマスター:ジェネレータvs return – 実践ガイド
  5. Python collections.Counter:効率的なカウント、更新、演算操作
  6. Python enumerate()をマスター:リスト、タプル、文字列、辞書でインデックス付きループ
  7. Pythonでファイル・ディレクトリの存在確認:実践ガイド
  8. Python JSON:エンコード、デコード、ファイル処理の実践ガイド
  9. Python list.index():要素の位置を検索する実践ガイド
  10. PythonファイルI/O:入出力操作をマスターする
  11. Java BufferedReader でファイル読み込み:実践ガイドと例