この記事では、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文
書内の要素を簡単に取得することができます。
未インストールの場合は、以下のコマンドでインストールしておいてください。
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文
書内の要素を簡単に取得することができます。
是非、実際に試してみてください。