转载:【Python】XML の要素・属性・内容を削除する (ElementTree) | 鎖プログラム
# サンプル XML
# sports.xml
1 2 3 4 5 6 7 8 9 10 11
| <?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 を削除していきます。
# XML を解析する
1 2 3 4 5 6 7
| import xml.etree.ElementTree as ET
tree = ET.parse('C:\pg\sports.xml')
root = tree.getroot()
|
まずは XML を解析します。XML ファイルを parse で解析し、getroot で XML のルートを取得します。
# XML の要素を削除する remove
1 2 3 4 5 6 7
| for sport in root.findall('sport'): for orgin in sport.findall('orgin'): sport.remove(orgin)
tree.write('C:\pg\sports.xml')
|
# 削除(remove)後の XML
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="UTF-8" ?> <sports> <sport order="001"> <name>サッカー</name> </sport> <sport order="002"> <name>野球</name> </sport> </sports>
|
XML の要素を削除するには、remove を使います。
remove は「親要素.remove (削除する子要素)」と指定します。要素「sport」を findall で取り出し、その要素の中の要素「orgin」をさらに findall で取り出しました。
ここでは要素「orgin」を削除しました。
# XML の属性を削除する pop
1 2 3 4 5 6
| for sport in root.iter('sport'): sport.attrib.pop("order", None)
tree.write('C:\pg\sports.xml')
|
# 削除(pop)後の XML
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="UTF-8" ?> <sports> <sport> <name>サッカー</name> </sport> <sport> <name>野球</name> </sport> </sports>
|
XML の属性を削除するには、pop を使います。
ここでは要素「sport」にある属性「order」を削除しました。
# XML のデータ(テキスト、コンテンツ)を削除(クリア)する
1 2 3 4 5 6
| for name in root.iter('name'): name.text = ''
tree.write('C:\pg\sports.xml')
|
# 削除後の XML
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="UTF-8" ?> <sports> <sport> </name> </sport> <sport> </name> </sport> </sports>
|
XML の要素・属性ではなく、データ(テキスト)自体をを削除するには、text を使います。
ここでは要素「name」にあるテキストを削除(クリア)しました。
# XML の要素・属性・テキストを一括で削除する
1 2 3 4 5
| root.clear()
tree.write('C:\pg\sports.xml')
|
# 削除後の XML
1 2
| <?xml version="1.0"?> <sports/>
|
XML の要素・属性・テキストをすべて削除するには、clear を使います。
これで Python の XML の削除するパターンとして、要素の削除・属性の削除・内容の削除の3パターンの削除を実行することができました。
参考ページ:https://docs.python.jp/3/library/xml.etree.elementtree.html
以上、Python で XML の要素・属性・内容を削除する方法でした。