オープンデータなどで利用されるXMLファイルをPythonの標準モジュールxmlで、扱ってみます。公式のドキュメントはこちらから。
<?xml version="1.0"?>
<data>
<item name="Pencil">
<price>100</price>
</item>
<item name="Eraser">
<price>80</price>
</item>
</data>
XMLを読み込み:ファイルを開き、子要素、属性へアクセスする
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
for item in root.findall('item'):
name = item.get('name')
price = item.find('price').text
print(name, price)
XMLを書き込み:属性を追加してファイルを保存する
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
c = 0
for item in root.findall('item'):
item.set('id',str(c))
c = c + 1
tree.write('output.xml')
<data>
<item name="Pencil" id="0">
<price>100</price>
</item>
<item name="Eraser" id="1">
<price>80</price>
</item>
</data>
XMLを書き込み:要素を追加してファイルを保存する
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
c = 0
for item in root.findall('item'):
sub_element = ET.SubElement(item, 'id')
sub_element.set('value',str(c))
c = c + 1
tree.write('output.xml')
<data>
<item name="Pencil">
<price>100</price>
<id value="0" />
</item>
<item name="Eraser">
<price>80</price>
<id value="1" />
</item>
</data>
要素の値を更新する
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
for item in root.findall('item'):
price = int(item.find('price').text) + 10
item.find('price').text = str(price)
tree.write('output.xml')
<data>
<item name="Pencil">
<price>110</price>
</item>
<item name="Eraser">
<price>90</price>
</item>
</data>
要素を削除する
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
for item in root.findall('item'):
item.remove(item.find('price'))
tree.write('output.xml')
<data>
<item name="Pencil">
</item>
<item name="Eraser">
</item>
</data>