Python

PythonでXMLファイルを扱う

オープンデータなどで利用される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>