Python で XML を使うときいろいろ忘れてるのでメモ
Python で XML パースするには、Python2.5 から標準ライブラリに入っている ElementTree を利用。
ElementTreeライブラリをインポート
>>> from xml.etree import ElementTree
サンプルXML(hage.xml)
<hage> <level name="angel" job="comedian" stat="now">6</level> <level name="math" job="politician" stat="former">7</level> <level name="blies" job="actor" stat="now">8</level> <level name="saitama" job="hero" stat="now">10</level> </hage>
XMLファイル読み込み
>>> tree = ElementTree.parse('hage.xml') >>> tree <xml.etree.ElementTree.ElementTree object at 0x10c5396d0>
ルートノード取得
>>> root = tree.getroot() >>> root <Element 'hage' at 0x10c55e850>
ルートのタグ名取得
>>> root.tag 'hage'
ルートの属性取得
>>> root.attrib {} # なし
子要素のタグ名取得
>>> for e in root: ... e.tag 'level' 'level' 'level' 'level'
子要素の属性取得
>>> for e in root: ... e.attrib {'stat': 'now', 'job': 'comedian', 'name': 'angel'} {'stat': 'former', 'job': 'politician', 'name': 'math'} {'stat': 'now', 'job': 'actor', 'name': 'blies'} {'stat': 'now', 'job': 'hero', 'name': 'saitama'}
子要素の属性名を指定して値を取得
>>> for e in root: ... e.get('name') 'angel' 'math' 'blies' 'saitama'
子要素の値を取得
>>> for e in root: ... e.text '6' '7' '8' '10'
■ findall(タグ名) を使用する場合
>>> root.findall('level') [<Element 'level' at 0x10c55eed0>, <Element 'level' at 0x10c55ef10>, <Element 'level' at 0x10c55efd0>, <Element 'level' at 0x10c5670d0>]
子要素の属性名を指定して値を取得
for e in root.findall('level'): ... e.get('name') 'angel' 'math' 'blies' 'saitama'
子要素の値を取得
for e in root.findall('level'): ... e.text '6' '7' '8' '10'
要素に値を書き込む
>>> root.findall('level')[1].text # 現在の値 '7' >>> root.findall('level')[1].text= '8' # 書き換え >>> root.findall('level')[1].text '8'
XMLファイルとして保存
>>> tree.write('hage1.xml')