【Python】ElementTreeを使ってXMLファイルを出力する方法

この記事では、PythonのElementTreeモジュールを使用して、XMLファイルを作成し、編集し、出力する方法を学ぶことができます。

XMLツリーの作成方法、要素の追加や削除、テキストや属性の編集方法、さらにはXMLファイルの出力オプションについても解説しています。

初心者の方でもわかりやすく、具体的なサンプルコードと実行結果の例を交えて説明していますので、ぜひ参考にしてください。

目次から探す

ElementTreeとは

ElementTreeは、Pythonの標準ライブラリであり、XMLデータを操作するための強力なモジュールです。

XMLファイルの作成、編集、解析など、さまざまな操作を行うことができます。

XML(eXtensible Markup Language)は、データを階層的に構造化するためのマークアップ言語です。

タグと要素を使ってデータを表現し、データの意味を明確にします。

ElementTreeのインストール方法

ElementTreeはPythonの標準ライブラリの一部であり、通常は追加のインストールは必要ありません。

Pythonをインストールすると、ElementTreeモジュールも自動的に利用できるようになります。

ただし、Pythonのバージョンによっては、ElementTreeがデフォルトでインストールされていない場合があります。

その場合は、以下の手順に従ってElementTreeをインストールすることができます。

  1. pipを使用してインストールする場合は、コマンドプロンプトまたはターミナルを開きます。
  2. 次のコマンドを入力して、ElementTreeをインストールします。
pip install elementtree
  1. インストールが完了すると、ElementTreeを使用する準備が整います。

XMLツリーの作成

XMLツリーを作成するためには、ElementTreeモジュールを使用します。

まずは、XMLツリーの基本的な要素であるルート要素を作成します。

ルート要素の作成

ルート要素を作成するには、Element関数を使用します。

以下のようなコードを実行すると、ルート要素が作成されます。

import xml.etree.ElementTree as ET

root = ET.Element("root")

ElementTreeモジュールをインポートして、Element関数を使用してルート要素を作成しています。

子要素の作成

ルート要素の下に子要素を作成するには、SubElement関数を使用します。

以下のようなコードを実行すると、子要素が作成されます。

import xml.etree.ElementTree as ET

root = ET.Element("root")
child = ET.SubElement(root, "child")

SubElement関数を使用して、ルート要素の下に子要素を作成しています。

属性の追加

要素に属性を追加するには、setメソッドを使用します。

以下のようなコードを実行すると、要素に属性が追加されます。

import xml.etree.ElementTree as ET

root = ET.Element("root")
root.set("attribute", "value")

setメソッドを使用して、要素に属性を追加しています。

以上がXMLツリーの作成に関する基本的な方法です。

次のセクションでは、XMLファイルへの出力方法について説明します。

XMLツリーの作成に関するサンプルコードと実行結果の例を含めて解説しています。

XMLファイルへの出力

XMLファイルへの出力は、ElementTreeを使用して簡単に行うことができます。

ここでは、XMLファイルへの直接出力と文字列への出力の方法について説明します。

ファイルへの直接出力

ElementTreeを使用して作成したXMLツリーを、ファイルに直接出力する方法を紹介します。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("root")
child = ET.SubElement(root, "child")
child.text = "Hello, World!"

# XMLファイルへの出力
tree = ET.ElementTree(root)
tree.write("output.xml")

上記の例では、rootというルート要素を作成し、その下にchildという子要素を作成しています。

child要素のテキストにはHello, World!という文字列を設定しています。

最後に、ElementTreeクラスのwrite()メソッドを使用して、作成したXMLツリーをファイルに出力しています。

出力先のファイル名はoutput.xmlとしていますが、任意のファイル名を指定することができます。

文字列への出力

ElementTreeを使用して作成したXMLツリーを、文字列として出力する方法もあります。

これは、ファイルに直接出力するのではなく、文字列として取得することができます。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("root")
child = ET.SubElement(root, "child")
child.text = "Hello, World!"

# XML文字列への出力
xml_string = ET.tostring(root, encoding="utf-8").decode("utf-8")
print(xml_string)

上記の例では、tostring()関数を使用してXMLツリーを文字列に変換しています。

encodingパラメータを指定することで、出力する文字列のエンコーディングを指定することができます。

ここではUTF-8を指定しています。

変換したXML文字列は、decode()メソッドを使用してデコードし、文字列として取得しています。

最後に、print()関数を使用してXML文字列を表示しています。

これにより、XMLツリーをファイルに出力するだけでなく、文字列として取得することもできます。

要素の追加

要素を追加することによって、XMLツリーに新しい要素を作成することができます。

要素の追加には、テキスト要素の追加、子要素の追加、属性の追加の3つの方法があります。

テキスト要素の追加

要素にテキストを追加するには、Element.text属性を使用します。

以下の例では、<name>要素にJohnというテキストを追加しています。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("person")

# テキスト要素の追加
name = ET.SubElement(root, "name")
name.text = "John"

# XMLファイルの出力
tree = ET.ElementTree(root)
tree.write("person.xml")

子要素の追加

要素に子要素を追加するには、Element.append()メソッドを使用します。

以下の例では、<person>要素に<age>要素を追加しています。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("person")

# 子要素の追加
age = ET.Element("age")
age.text = "25"
root.append(age)

# XMLファイルの出力
tree = ET.ElementTree(root)
tree.write("person.xml")

属性の追加

要素に属性を追加するには、Element.set()メソッドを使用します。

以下の例では、<person>要素にageという属性を追加しています。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("person")

# 属性の追加
root.set("age", "25")

# XMLファイルの出力
tree = ET.ElementTree(root)
tree.write("person.xml")

要素の追加によって、XMLツリーに新しい要素を作成することができます。

テキスト要素の追加、子要素の追加、属性の追加の方法を使い分けて、必要な要素を作成してください。

要素の追加には、Element.append()メソッドを使用します。

テキスト要素の追加には、Element.text属性を使用します。

属性の追加には、Element.set()メソッドを使用します。

要素の削除

要素を削除するには、ElementTreeモジュールのremove()メソッドを使用します。

このメソッドは、指定した要素をツリーから削除します。

以下は、要素の削除の例です。

import xml.etree.ElementTree as ET

# XMLファイルの読み込み
tree = ET.parse('sample.xml')
root = tree.getroot()

# 削除する要素を指定
element_to_remove = root.find('child')

# 要素の削除
root.remove(element_to_remove)

# XMLファイルへの出力
tree.write('output.xml')

上記の例では、sample.xmlという名前のXMLファイルを読み込み、childという要素を削除しています。

root.remove()メソッドを使用して、指定した要素を削除することができます。

要素の削除後、tree.write()メソッドを使用して、変更を加えたXMLファイルをoutput.xmlという名前で出力しています。

削除する要素に子要素が含まれている場合、関連する子要素も同時に削除されます。

要素の削除を行う前に、関連する要素の関係を確認し、必要な処理を行ってください。

要素の編集

要素の編集は、既存の要素のテキストや属性を変更することができます。

ElementTreeでは、要素のテキストや属性を直接変更することができます。

テキスト要素の編集

要素のテキストを編集するには、text属性を使用します。

text属性に新しいテキストを代入することで、要素のテキストを変更することができます。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("root")
child = ET.SubElement(root, "child")
child.text = "Hello, World!"

# テキスト要素の編集
child.text = "Hello, Python!"

# XMLファイルへの出力
tree = ET.ElementTree(root)
tree.write("output.xml")

上記の例では、child要素のテキストを最初にHello, World!に設定し、その後Hello, Python!に変更しています。

属性の編集

要素の属性を編集するには、setメソッドを使用します。

setメソッドに属性名と新しい属性値を指定することで、要素の属性を変更することができます。

import xml.etree.ElementTree as ET

# XMLツリーの作成
root = ET.Element("root")
child = ET.SubElement(root, "child")
child.set("name", "John")
child.set("age", "25")

# 属性の編集
child.set("age", "30")

# XMLファイルへの出力
tree = ET.ElementTree(root)
tree.write("output.xml")

上記の例では、child要素に最初にname属性とage属性を設定し、その後age属性の値を30に変更しています。

要素の編集を行う際には、text属性やsetメソッドを適切に使用して、要素のテキストや属性を変更することができます。

XMLファイルの出力オプション

XMLファイルを出力する際には、いくつかのオプションを設定することができます。

ここでは、インデントの設定、エンコーディングの設定、およびプリティプリントの設定について説明します。

インデントの設定

XMLファイルを読みやすくするために、インデントを設定することができます。

インデントは、要素や属性を階層的に表示するために使用されます。

import xml.etree.ElementTree as ET

# インデントを設定する
ET.indent(root, space="    ")

# XMLファイルへの出力
tree.write("output.xml", encoding="utf-8")

上記の例では、ET.indent()関数を使用してインデントを設定しています。

rootはXMLツリーのルート要素を指定します。

spaceパラメータには、インデントに使用するスペースの数を指定します。

デフォルトでは、インデントはタブ文字で行われますが、必要に応じてスペースを使用することもできます。

エンコーディングの設定

XMLファイルを出力する際には、エンコーディングを指定することができます。

エンコーディングは、テキストデータをバイト列に変換するために使用されます。

import xml.etree.ElementTree as ET

# エンコーディングを設定する
tree.write("output.xml", encoding="utf-8")

上記の例では、tree.write()関数のencodingパラメータにエンコーディングを指定しています。

ここでは、UTF-8エンコーディングを使用していますが、必要に応じて他のエンコーディングを指定することもできます。

プリティプリントの設定

XMLファイルを出力する際には、プリティプリントを設定することができます。

プリティプリントは、XMLファイルを整形して表示するために使用されます。

import xml.etree.ElementTree as ET

# プリティプリントを設定する
ET.dump(root)

上記の例では、ET.dump()関数を使用してプリティプリントを行っています。

rootはXMLツリーのルート要素を指定します。

この関数を使用すると、XMLファイルが整形されて表示されます。

これらのオプションを使用することで、XMLファイルの出力をより見やすくすることができます。

必要に応じて、適切な設定を行ってください。

目次から探す