PythonでXMLを扱うには、xml.etree.ElementTree
をインポートします。
XMLのパース
XMLを解析するには、parse
メソッドを使用します。このメソッドのパラメータはXMLファイルのパスです。
import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
また、文字列からXMLを解析することも可能です。
root = ET.fromstring(country_data_as_string)
XMLの検索
ElementTreeでは、タグ名を指定して現在の要素の直接の子要素を検索することができます。
list = root.findall('country')
また、タグ名で最初に見つかった要素だけを検索することも可能です。
elem = root.find('country')
さらに、XPath式を使用してより自由に要素を取得することもできます。
root.findall("./country/neighbor")
コンテンツと属性へのアクセス
ElementTreeを使用すると、XMLのコンテンツと属性に簡単にアクセスできます。
# コンテンツにアクセス
rank = country.find('rank').text
# 属性にアクセス
name = country.get('name')
name = country.attrib['name']
子要素の生成と削除
ElementTreeでは、新しい子要素を生成したり、既存の子要素を削除することも可能です。
# 子要素の生成
elem = ET.SubElement(root,'country')
elem = ET.SubElement(root,'country', attrib={'name':'Liechtenstein'})
# 子要素の削除
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country)
XMLの出力
最後に、解析したXMLを出力する方法を紹介します。
# sys.stdoutに出力
ET.dump(root)
# ファイルに出力
tree = ET.ElementTree(root)
tree.write('filename', encoding="utf-8", xml_declaration=True)
# 改行付きでファイルに出力
import xml.dom.minidom as md
document = md.parseString(ET.tostring(root, 'utf-8'))
with open(fname,'w') as f:
document.writexml(f, encoding='utf-8', newl='\n', indent='', addindent=' ')
以上がPythonとElementTreeを使ってXMLを解析する基本的な手順です。これらの知識を使って、XMLデータの取得や解析に挑戦してみてください。.