【Python】XMLで子要素を取得する方法

この記事では、Pythonを使ってXMLファイルを扱う方法について解説します。

XMLファイルの読み込み方法や子要素の取得方法、さらに子要素の属性値やテキスト、値、数を取得する方法を紹介します。

初心者の方でもわかりやすく解説しているので、PythonでXMLを扱いたい方はぜひ参考にしてください。

目次から探す

PythonでXMLを扱うためのライブラリ

Pythonでは、さまざまなライブラリを使用してXMLを扱うことができます。

ここでは、代表的な3つのライブラリについて紹介します。

xml.etree.ElementTree

xml.etree.ElementTreeは、Pythonの標準ライブラリに含まれているXML処理のためのモジュールです。

シンプルで使いやすいインターフェースを提供しており、基本的なXMLの読み書きや操作が可能です。

import xml.etree.ElementTree as ET

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

# 子要素の取得
for child in root:
    print(child.tag, child.attrib)

# 要素の属性値の取得
element = root.find('element')
print(element.get('attribute'))

# 要素のテキストの取得
text = element.text
print(text)

lxml

lxmlは、高速でパワフルなXML処理ライブラリです。

使用する場合は事前にインストールが必要です。

未インストールの場合は、以下のコマンドでインストールしておくようにしてください。

pip install lxml

xml.etree.ElementTreeよりも高速で、XPathやCSSセレクタを使用して要素を取得することができます。

from lxml import etree

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

# 子要素の取得
for child in root:
    print(child.tag, child.attrib)

# XPathを使って要素を取得
elements = root.xpath('//element')
for element in elements:
    print(element.get('attribute'))

# CSSセレクタを使って要素を取得
elements = root.cssselect('element')
for element in elements:
    print(element.text)

BeautifulSoup

BeautifulSoupは、HTMLやXMLを解析するためのライブラリです。

使用する場合は事前にインストールが必要です。

未インストールの場合は、以下のコマンドでインストールしておくようにしてください。

pip install beautifulsoup4

シンプルなAPIを提供しており、柔軟な要素の取得や操作が可能です。

from bs4 import BeautifulSoup

# XMLファイルの読み込み
with open('sample.xml', 'r') as f:
    xml_data = f.read()

soup = BeautifulSoup(xml_data, 'xml')

# 子要素の取得
for child in soup.find_all():
    print(child.name, child.attrs)

# 要素の属性値の取得
element = soup.find('element')
print(element['attribute'])

# 要素のテキストの取得
text = element.get_text()
print(text)

以上がPythonでXMLを扱うための代表的なライブラリの紹介です。

それぞれのライブラリには特徴や使い方が異なるので、目的や要件に応じて適切なライブラリを選択してください。

XMLファイルの読み込み方法

XMLファイルをPythonで読み込むためには、いくつかの方法があります。

ここでは、ファイルからの読み込みとURLからの読み込みの方法を紹介します。

ファイルからの読み込み

XMLファイルをPythonで読み込むには、xml.etree.ElementTreeモジュールを使用します。

以下のようなコードを使って、XMLファイルを読み込むことができます。

import xml.etree.ElementTree as ET

# XMLファイルのパスを指定して読み込む
tree = ET.parse('sample.xml')

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

# 以降、必要な処理を行う

上記の例では、sample.xmlという名前のXMLファイルを読み込んでいます。

tree.getroot()を使うことで、XMLのルート要素を取得することができます。

URLからの読み込み

XMLファイルがURL上にある場合、Pythonで読み込むこともできます。

以下のようなコードを使って、URLからXMLファイルを読み込むことができます。

import xml.etree.ElementTree as ET
import urllib.request

# XMLファイルのURLを指定して読み込む
url = 'https://example.com/sample.xml'
response = urllib.request.urlopen(url)
data = response.read()

# XMLデータを解析する
tree = ET.fromstring(data)

# 以降、必要な処理を行う

上記の例では、urllib.requestモジュールを使用して、指定したURLからXMLデータを取得しています。

ET.fromstring(data)を使うことで、XMLデータを解析し、ルート要素を取得することができます。

sample.xmlhttps://example.com/sample.xmlは、実際のXMLファイルのパスやURLに置き換えてください。

また、ファイルやURLが存在しない場合やアクセス権限がない場合はエラーが発生することに注意してください。

子要素を取得する方法

XMLファイルには、親要素と子要素が階層的に配置されています。

Pythonを使ってXMLファイルの子要素を取得する方法について解説します。

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

XMLファイルの中には、複数の同じタグ名を持つ子要素が存在することがあります。

この場合、特定のタグ名を持つ子要素を取得する方法があります。

import xml.etree.ElementTree as ET

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

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

# 取得した子要素の情報を表示する
for child in children:
    print(child.tag, child.text)

上記の例では、tag_nameというタグ名を持つ子要素を取得しています。

取得した子要素の情報を表示するために、child.tagchild.textを使ってタグ名とテキストを取得しています。

XPathを使って取得する

XPathは、XML文書内の要素を指定するためのパス表現言語です。

XPathを使ってXMLファイルの子要素を取得する方法もあります。

import xml.etree.ElementTree as ET

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

# XPathを使って子要素を取得する
children = root.findall('.//tag_name')

# 取得した子要素の情報を表示する
for child in children:
    print(child.tag, child.text)

上記の例では、.//tag_nameというXPathを使って子要素を取得しています。

//は、現在の要素の下位要素を検索するための記号です。

属性を指定して取得する

XMLファイルの子要素には、属性を持つことがあります。

属性を指定して子要素を取得する方法もあります。

import xml.etree.ElementTree as ET

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

# 属性を指定して子要素を取得する
children = root.findall('.//tag_name[@attribute_name="attribute_value"]')

# 取得した子要素の情報を表示する
for child in children:
    print(child.tag, child.text)

上記の例では、tag_nameというタグ名を持ち、attribute_nameという属性がattribute_valueという値を持つ子要素を取得しています。

これらの方法を使って、XMLファイルの子要素を取得することができます。

XMLファイルの構造に合わせて適切な方法を選択し、必要な情報を取得してください。

XMLファイルのサンプルとして、sample.xmlというファイル名を使用しています。

実際のXMLファイルのパスやタグ名、属性名、属性値は、適宜変更してください。

その他の操作

子要素の属性値を取得する

XMLの子要素には、属性とその値を持つことがあります。

Pythonでは、子要素の属性値を取得するための方法が用意されています。

# タグ名を指定して子要素の属性値を取得する
attr = 子要素.get('属性名')

# XPathを使って子要素の属性値を取得する
attr = 子要素.attrib['属性名']

子要素のテキストを取得する

XMLの子要素には、テキストデータを持つことがあります。

Pythonでは、子要素のテキストを取得するための方法が用意されています。

# タグ名を指定して子要素のテキストを取得する
str = 子要素.text

子要素の値を取得する

XMLの子要素には、属性値やテキストデータ以外にも、さらに子要素を持つことがあります。

Pythonでは、子要素の値を取得するための方法が用意されています。

# タグ名を指定して子要素の値を取得する
val = 子要素.find('タグ名').text

# XPathを使って子要素の値を取得する
val = 子要素.find('XPath').text

子要素の数を取得する

XMLの子要素の数を取得するには、Pythonの組み込み関数であるlen()を使用します。

# 子要素の数を取得する
count = len(親要素.findall('子要素のタグ名'))

以上が、XMLで子要素の属性値やテキスト、値、数を取得するための方法です。

これらの操作を使って、XMLデータを効果的に解析し、必要な情報を取得することができます。

目次から探す