PythonでXMLファイルや文字列を解析し、TagやattributeごとにElementを読み取る方法を紹介します。
1. XMLファイルの解析
ElementTree.parse(file)
は引数に渡されたファイルを解析し、ElementTree オブジェクトに返します。
import xml.etree.ElementTree as ET
filePath = "./example.xml"
tree = ET.parse(filePath)
ET.dump(tree)
Output:
<Countries><Korea><City>Seoul</City></Korea><Japanese><City>Tokyo</City></Japanese></Countries>
1.1 解析したオブジェクトを見やすく出力:TextにTab、改行文字を追加
上記のコードで、 _pretty_print()
をさらに実装して、解析した xml オブジェクトの text に Tab と改行文字を追加すると、次のように見事に出力できます。
import xml.etree.ElementTree as ET
def _pretty_print(current, parent=None, index=-1, depth=0):
for i, node in enumerate(current):
_pretty_print(node, current, i, depth + 1)
if parent is not None:
if index == 0:
parent.text = '\n' + ('\t' * depth)
else:
parent[index - 1].tail = '\n' + ('\t' * depth)
if index == len(parent) - 1:
current.tail = '\n' + ('\t' * (depth - 1))
filePath = "./example.xml"
tree = ET.parse(filePath)
_pretty_print(tree.getroot())
ET.dump(tree)
Output:
<Countries>
<Korea>
<City attr1="value1" attr2="value2">Seoul</City>
</Korea>
<Japanese>
<City attr1="value1" attr2="value2">Tokyo</City>
</Japanese>
</Countries>
2. XML文字列解析
ElementTree.fromstring()
はXML文字列を引数として受け取り、解析した結果をElementオブジェクトに返します。
import xml.etree.ElementTree as ET
xml_str = "<Countries><Korea><City>Seoul</City></Korea><Japanese><City>Tokyo</City></Japanese></Countries>"
element = ET.fromstring(xml_str)
ET.dump(element)
Output:
<Countries><Korea><City>Seoul</City></Korea><Japanese><City>Tokyo</City></Japanese></Countries>
3. XML解析し、要素ごとに読み込む
次のようにXMLを解析してElementオブジェクトを取得し、要素ごとにアクセスできます。 findall()
ですべてのタグを見つけることができ、 attrib
でElementのattributeにアクセスできます。 XMLのテキストは text
でアクセスできます。 Element の子 Element は find()
や findall()
でアクセスできます。
import xml.etree.ElementTree as ET
xml_str = '''<?xml version='1.0' encoding='utf-8'?>
<Countries>
<Country name="Korea">
<City attr1="value1" attr2="value2">Seoul</City>
</Country>
<Country name="Japanese">
<City attr1="value1" attr2="value2">Tokyo</City>
</Country>
</Countries>
'''
root = ET.fromstring(xml_str)
for country in root.findall("Country"):
attr = country.attrib
name = attr.get("name")
city = country.find("City")
city_name = city.text
city_attr1 = city.attrib.get("attr1")
city_attr2 = city.attrib.get("attr2")
print(f"attr : {attr}")
print(f"name : {name}")
print(f"attr : {attr}")
print(f"city_name : {city_name}")
print(f"city_attr1 : {city_attr1}")
print(f"city_attr2 : {city_attr2}")
Output:
attr : {'name': 'Korea'}
name : Korea
attr : {'name': 'Korea'}
city_name : Seoul
city_attr1 : value1
city_attr2 : value2
attr : {'name': 'Japanese'}
name : Japanese
attr : {'name': 'Japanese'}
city_name : Tokyo
city_attr1 : value1
city_attr2 : value2
Related Posts
- Python - JSONファイル読み書きする方法
- Python - 平方根の計算方法(Square Root)
- Python - 文字列 特定文字 削除
- Python lower() 文字列を小文字に変換
- Python upper() 文字列を大文字に変換
- Python - ファイル数の確認
- Python - イテレーションステートメントでセット巡回
- Python - 文字列位置(Index)を探す
- Python - ファイルを読み込み、1行ずつリストに保存する
- UbuntuにPython 3.10をインストールする方法
- Python - 関数の定義と呼び出し方法
- Python - ディクショナリーの整理と例
- Python - ディクショナリーの初期化、4つの方法
- Python - XML生成とファイルの保存
- Python - XML解析、タグ、または要素別に読み取る
- Python - 文字列をリストに変換する方法
- Python - 'and'と'&'の違い
- Python - 文字列 切り取り(substring、slicing)
- Python - 'is'と'=='の違い
- PythonでShell Command、スクリプトの実行
- Python - 数字3桁ごとにコンマ(,)を入れる方法
- Python - 辞書をリストに変換
- Python - 文字列から数字のみを抽出する方法
- Python - zipで二つのリスト縛り
- Python - リストを文字列に変換する
- Python - 辞書にキーがあることを確認する
- Python - ファイル、フォルダが存在確認
- Python - floatをintに変更する方法
- Python - リストの最初、最後の 要素を取得する方法
- Python - bytesをStringに変換する方法
- Python - Stringをbytesに変換する方法
- Python - 辞書の重複排除方法
- Python - 二つのリスト一つ併合
- Python - リストの重複排除、4つの方法
- Python - listの先頭にデータを追加する