PythonのXMLを解析・読み取りする方法について。
この記事の内容はコチラです
- PythonでXMLを解析する
- PythonでXMLを読み取る
- データを1つずつ取得する
- 「xml.etree.ElementTree」モジュールの使い方を知る
今回は、PythonでXMLを読み取りする方法を解説します。
PythonでXMLを読み取る
PythonでXMLを取得して読み取るには「xml.etree.ElementTree」モジュールを使います。
サンプルXML
sports1.xml (属性なし)
<?xml version="1.0" encoding="UTF-8" ?> <sports> <sport> <name>サッカー</name> <orgin>イングランド</orgin> </sport> <sport> <name>野球</name> <orgin>アメリカ</orgin> </sport> </sports>
sports2.xml(属性あり)
<?xml version="1.0" encoding="UTF-8" ?> <sports> <sport order="001"> <name>サッカー</name> <orgin>イングランド</orgin> </sport> <sport order="002"> <name>野球</name> <orgin>アメリカ</orgin> </sport> </sports>
XMLのサンプルとして、「属性あり」と「属性なし」の2パターンを用意しました。
XMLを解析する
PythonでXMLを読み取るには、「解析」→「要素・データ取得」という流れになります。XMLを解析する方法は2パターンあります。
- XMLファイル
- XMLデータ(変数)
1.XMLファイルを解析する
import xml.etree.ElementTree as ET # XMLファイルを解析 tree = ET.parse('c:\\pg\sports1.xml') # XMLを取得 root = tree.getroot()
まず最初に「XMLファイル」を読み取るパターンです。
PythonでXMLを扱うには、「xml.etree.ElementTree」をインポートします。
「parse」でXMLを解析します。パラメータはファイルのパスです。その結果を「getroot」で取得しルート変数「root」へ格納します。
2.XMLデータを解析する
import xml.etree.ElementTree as ET # XMLを取得 root = ET.fromstring(sports_xml)
次はファイルではなく、XMLデータを読み取るパターンです。XMLが変数に入っているパターンです。
PythonでXMLを扱うには、「xml.etree.ElementTree」をインポートします。
XMLの構造がそのままセットされた変数「sports_xml」を「fromstring」のパラメータにセットします。解析した結果がルート変数「root」へ格納されます。
XML 子要素を取得する
# 子要素を取得する for child in root: print(child.tag, child.attrib) #[sports1.xmlの結果] sport {} #[sports1.xmlの結果] sport {} #[sports2.xmlの結果] sport {'order': '001'} #[sports2.xmlの結果] sport {'order': '002'}
子要素を取得するには、XMLを「getroot」で取得したルート変数「root」を「for in」で1つずつ取り出します。
- 「tag」・・・子要素のタグ
- 「attrib」・・・子要素の属性
属性がない「sports1.xml」は「attrib」で取得できませんでした。
要素名を指定してデータを取得する
# 要素「name」のデータを1つずつ取得 for name in root.iter('name'): print(name.text) #[結果] サッカー #[結果] 野球
XMLの要素名を指定して取り出すこともできます。ここでは要素名「name」のデータを取得します。
ルート変数「root」の「iter」に要素名をパラメータとしてセットして1つずつ取り出しました。実際のデータ(コンテンツ)は「text」で取得できます。
配列でデータを取得する
# 配列でデータを1つずつ取得 print(root[0][0].text) print(root[0][1].text) print(root[1][0].text) print(root[1][1].text) #[結果] サッカー #[結果] イングランド #[結果] 野球 #[結果] アメリカ
先ほどは要素名を指定してデータを取り出しましたが、ここでは上から順番に取得します。
ルート変数「root」の配列番号で指定して取り出すことができます。「00」は1つ目のデータ、「01」が2つ目のデーという感じです。
Pythonヘルプ:https://docs.python.jp/3/library/xml.etree.elementtree.html
以上、PythonでXMLを読み取りする「xml.etree.ElementTree」モジュールの使い方でした。
コメント