【Python】XMLでXPathを使って要素を取得する方法

この記事では、XPathを使ってPythonでXML文書内の要素を取得する方法について解説します。

XPathを使うことで、要素のタグ名や属性値、階層構造、位置、テキスト、属性値を指定して簡単に要素を取得することができます。

Pythonのライブラリであるlxmlを使用して、具体的なサンプルコードと実行結果の例を交えながら解説します。

目次から探す

XPathとは

XPath(XML Path Language)は、XML文書内の要素や属性を指定して取得するための言語です。

XPathは、XML文書の階層構造を利用して、特定の要素や属性を簡単に見つけることができます。

XPathは、XML文書の解析やデータの抽出に広く使用されており、パス表記を使用して要素を指定します。

パス表記は、要素の階層構造を示すためにスラッシュ(/)を使用します。

たとえば、/bookstore/bookというXPathは、bookstore要素の直下にあるbook要素を指定します。

XPathは、要素のタグ名や属性値を使用して要素を特定することもできます。

たとえば、//book[@category='fiction']というXPathは、category属性の値がfictionであるbook要素を指定します。

XPathを使って要素を取得する方法について、以下で詳しく解説します。

XPathを使って要素を取得する方法

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

Pythonのライブラリであるlxmlを使用することで、XPathを使ってXML文書内の要素を簡単に取得することができます。

lxmlライブラリを使用するためには、事前にインストールが必要です。

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

pip install lxml

要素のタグ名で取得する方法

要素のタグ名を指定して、そのタグ名に一致する要素を取得することができます。

以下の例では、<book>というタグ名を持つ要素を取得しています。

from lxml import etree

# XML文書のパース
tree = etree.parse('books.xml')

# タグ名がbookの要素を取得
elements = tree.xpath('//book')

属性値で要素を取得する方法

要素の属性値を指定して、その属性値に一致する要素を取得することもできます。

以下の例では、id属性の値が001である要素を取得しています。

from lxml import etree

# XML文書のパース
tree = etree.parse('books.xml')

# 属性値がid="001"の要素を取得
elements = tree.xpath('//book[@id="001"]')

要素の階層構造を指定して取得する方法

要素の階層構造を指定して、特定の階層にある要素を取得することもできます。

以下の例では、<book>要素の子要素である<title>要素を取得しています。

from lxml import etree

# XML文書のパース
tree = etree.parse('books.xml')

# book要素の子要素であるtitle要素を取得
elements = tree.xpath('//book/title')

要素の位置を指定して取得する方法

要素の位置を指定して、特定の位置にある要素を取得することもできます。

以下の例では、2番目の<book>要素を取得しています。

from lxml import etree

# XML文書のパース
tree = etree.parse('books.xml')

# 2番目のbook要素を取得
elements = tree.xpath('//book[2]')

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

要素のテキストを取得するには、text()関数を使用します。

以下の例では、<title>要素のテキストを取得しています。

from lxml import etree

# XML文書のパース
tree = etree.parse('books.xml')

# title要素のテキストを取得
titles = tree.xpath('//title/text()')

要素の属性値を取得する方法

要素の属性値を取得するには、@を使用します。

以下の例では、<book>要素のid属性の値を取得しています。

from lxml import etree

# XML文書のパース
tree = etree.parse('books.xml')

# book要素のid属性の値を取得
ids = tree.xpath('//book/@id')

これらの方法を使うことで、XPathを使ってXML文書内の要素を簡単に取得することができます。

是非、実際に試してみてください。

目次から探す