【Python】XMLを読み込みする方法

この記事では、Pythonを使用してXMLを読み込み、要素にアクセスし、データを取得・変更する方法を紹介します。

目次から探す

XMLを読み込む方法

XMLは、データを階層的に構造化して保存するためのフォーマットです。

Pythonでは、さまざまな方法でXMLを読み込むことができます。

ここでは、主な3つの方法について紹介します。

DOMパーサー

DOM(Document Object Model)パーサーは、XMLドキュメント全体をメモリに読み込み、ツリー構造として表現します。

これにより、XMLの要素に簡単にアクセスできます。

Pythonでは、xml.domモジュールを使用してDOMパーサーを利用することができます。

以下は、DOMパーサーを使用してXMLを読み込む基本的なコードの例です。

import xml.dom.minidom

# XMLファイルを読み込む
dom = xml.dom.minidom.parse("example.xml")

# ルート要素を取得する
root = dom.documentElement

# 要素の取得例
element = root.getElementsByTagName("tag_name")[0]

SAXパーサー

SAX(Simple API for XML)パーサーは、XMLドキュメントを逐次的に処理します。

ドキュメントを一度に全てメモリに読み込む必要がないため、大きなXMLファイルを効率的に処理することができます。

Pythonでは、xml.saxモジュールを使用してSAXパーサーを利用することができます。

以下は、SAXパーサーを使用してXMLを読み込む基本的なコードの例です。

import xml.sax

# ハンドラクラスの定義
class MyHandler(xml.sax.ContentHandler):
    def startElement(self, name, attrs):
        # 要素の開始タグを処理するコード

    def endElement(self, name):
        # 要素の終了タグを処理するコード

    def characters(self, content):
        # 要素のテキストデータを処理するコード

# XMLファイルを読み込む
parser = xml.sax.make_parser()
handler = MyHandler()
parser.setContentHandler(handler)
parser.parse("example.xml")

ElementTree

ElementTreeは、XMLドキュメントを要素ツリーとして表現するための高レベルなAPIです。

シンプルな操作でXMLを読み込むことができます。

Pythonでは、xml.etree.ElementTreeモジュールを使用してElementTreeを利用することができます。

以下は、ElementTreeを使用してXMLを読み込む基本的なコードの例です。

import xml.etree.ElementTree as ET

# XMLファイルを読み込む
tree = ET.parse("example.xml")

# ルート要素を取得する
root = tree.getroot()

# 要素の取得例
element = root.find("tag_name")

以上が、PythonでXMLを読み込むための主な方法です。

それぞれの方法には特徴がありますので、使用する際には目的や要件に合わせて選択してください。

XMLの要素にアクセスする方法

XMLを読み込んだ後、特定の要素にアクセスする方法について説明します。

タグ名を指定して要素を取得する

XML内の特定のタグ名を持つ要素を取得するには、以下の手順を実行します。

  1. XMLをパースして要素ツリーを作成します。
  2. ツリー内の要素を探索し、目的のタグ名を持つ要素を見つけます。
  3. 見つかった要素を取得します。

以下は、PythonのElementTreeモジュールを使用してタグ名を指定して要素を取得する例です。

import xml.etree.ElementTree as ET

# XMLをパースして要素ツリーを作成
tree = ET.parse('sample.xml')
root = tree.getroot()

# タグ名を指定して要素を取得
elements = root.findall('tag_name')

# 取得した要素を表示
for element in elements:
    print(element.text)

属性を指定して要素を取得する

XML内の特定の属性を持つ要素を取得するには、以下の手順を実行します。

  1. XMLをパースして要素ツリーを作成します。
  2. ツリー内の要素を探索し、目的の属性を持つ要素を見つけます。
  3. 見つかった要素を取得します。

以下は、PythonのElementTreeモジュールを使用して属性を指定して要素を取得する例です。

import xml.etree.ElementTree as ET

# XMLをパースして要素ツリーを作成
tree = ET.parse('sample.xml')
root = tree.getroot()

# 属性を指定して要素を取得
elements = root.findall(".//[@attribute='value']")

# 取得した要素を表示
for element in elements:
    print(element.text)

XPathを使用して要素を取得する

XPathを使用すると、より柔軟に要素を取得することができます。

XPathは、要素の階層構造や属性を指定して要素を絞り込むための表現方法です。

以下は、PythonのElementTreeモジュールを使用してXPathを使用して要素を取得する例です。

import xml.etree.ElementTree as ET

# XMLをパースして要素ツリーを作成
tree = ET.parse('sample.xml')
root = tree.getroot()

# XPathを使用して要素を取得
elements = root.findall("xpath_expression")

# 取得した要素を表示
for element in elements:
    print(element.text)

以上が、XMLの要素にアクセスする方法の説明です。

タグ名や属性、XPathを使用して目的の要素を取得することができます。

XMLのデータを取得する方法

XMLを読み込んだ後、データを取得する方法について説明します。

テキストデータを取得する

XMLの要素に含まれるテキストデータを取得するには、要素のtext属性を使用します。

以下は、ElementTreeを使用してXMLのテキストデータを取得する例です。

import xml.etree.ElementTree as ET

# XMLをパースする
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素のテキストデータを取得する
element = root.find('要素名')
text_data = element.text

print(text_data)

属性値を取得する

XMLの要素には、属性が付与されることがあります。

属性値を取得するには、要素のgetメソッドを使用します。

以下は、ElementTreeを使用してXMLの属性値を取得する例です。

import xml.etree.ElementTree as ET

# XMLをパースする
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素の属性値を取得する
element = root.find('要素名')
attribute_value = element.get('属性名')

print(attribute_value)

子要素を取得する

XMLの要素には、子要素が含まれることがあります。

子要素を取得するには、要素のfindメソッドやfindallメソッドを使用します。

以下は、ElementTreeを使用してXMLの子要素を取得する例です。

import xml.etree.ElementTree as ET

# XMLをパースする
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素の子要素を取得する
element = root.find('要素名')
child_elements = element.findall('子要素名')

for child in child_elements:
    print(child.text)

以上が、XMLのデータを取得する方法の例です。

XMLの構造に応じて、適切なメソッドを使用してデータを取得してください。

XMLのデータを変更する方法

XMLを読み込んだ後、必要に応じてデータを変更することができます。

ここでは、要素の追加・削除・変更する方法と属性の追加・削除・変更する方法について説明します。

要素の追加・削除・変更する

要素の追加や削除、変更を行うには、ElementTreeモジュールを使用します。

以下に具体的な操作方法を示します。

要素の追加

要素を追加するには、Elementクラスのappendメソッドを使用します。

例えば、新しい要素を作成し、既存の要素の子要素として追加する場合は、以下のようにします。

import xml.etree.ElementTree as ET

# XMLを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()

# 新しい要素を作成
new_element = ET.Element('new_element')
new_element.text = 'This is a new element.'

# 既存の要素に新しい要素を追加
root.append(new_element)

# 変更を保存
tree.write('sample.xml')

要素の削除

要素を削除するには、Elementクラスのremoveメソッドを使用します。

例えば、特定の要素を削除する場合は、以下のようにします。

import xml.etree.ElementTree as ET

# XMLを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素を削除
for element in root.findall('element'):
    root.remove(element)

# 変更を保存
tree.write('sample.xml')

要素の変更

要素の内容を変更するには、Elementクラスのtext属性を変更します。

例えば、特定の要素のテキストを変更する場合は、以下のようにします。

import xml.etree.ElementTree as ET

# XMLを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素のテキストを変更
for element in root.findall('element'):
    element.text = 'New text'

# 変更を保存
tree.write('sample.xml')

属性の追加・削除・変更する

要素に属性を追加・削除・変更するには、Elementクラスのsetメソッドやattrib属性を使用します。

以下に具体的な操作方法を示します。

属性の追加

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

例えば、特定の要素に新しい属性を追加する場合は、以下のようにします。

import xml.etree.ElementTree as ET

# XMLを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素に新しい属性を追加
for element in root.findall('element'):
    element.set('new_attribute', 'value')

# 変更を保存
tree.write('sample.xml')

属性の削除

属性を削除するには、attrib属性を使用します。

例えば、特定の要素から属性を削除する場合は、以下のようにします。

import xml.etree.ElementTree as ET

# XMLを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素から属性を削除
for element in root.findall('element'):
    del element.attrib['attribute_name']

# 変更を保存
tree.write('sample.xml')

属性の変更

属性の値を変更するには、attrib属性を使用します。

例えば、特定の要素の属性の値を変更する場合は、以下のようにします。

import xml.etree.ElementTree as ET

# XMLを読み込む
tree = ET.parse('sample.xml')
root = tree.getroot()

# 特定の要素の属性の値を変更
for element in root.findall('element'):
    element.attrib['attribute_name'] = 'new_value'

# 変更を保存
tree.write('sample.xml')

以上が、XMLのデータを変更する方法についての説明です。

要素の追加・削除・変更や属性の追加・削除・変更を行うことで、XMLデータを柔軟に操作することができます。

目次から探す