PythonのxmlモジュールのElementからElementTreeを作る

PythonのxmlまたはdefusedxmlモジュールのElementオブジェクトから、ElementTreeオブジェクトを作ってみました。

目次

  1. ElementTreeコンストラクター
  2. 作成例

ElementTreeコンストラクター

ElementTreeオブジェクトのコンストラクターがdefusedxmlで呼べなかったので、組み込みモジュールのxmlモジュールの方のコンストラクターを使います。

import xml.etree.ElementTree

tree = import xml.etree.ElementTree.ElementTree([element], [file])
変数 内容
element Element 省略可。既定値はNone。Elementオブジェクトの根要素。
file str, object 省略可。既定値はNone。XMLファイル名、またはファイルオブジェクト。
tree ElementTree ElementTreeオブジェクト。

作成例

試してみましょう。

次のXMLファイルをreadで文字列として読み込んで、fromstringメソッドでElementオブジェクトに変換した後に、ElementTreeオブジェクトを作って、ElementTreeオブジェクトのwriteメソッドでファイルに出力します。

<?xml version="1.0" encoding="UTF-8" ?>
<tip>
    <middle id='1'>
        <bottom>content_1</bottom>
    </middle>
    <middle id='2'>
        <!--
        <bottom>content_20</bottom>
        <bottom>content_21</bottom>
        -->
        <bottom>いろは</bottom>
        <bottom>にほへと</bottom>
        <bottom></bottom>
    </middle>
    <middle id='3'>
        content_3
    </middle>
</tip>
import defusedxml.ElementTree as ET
import xml.etree.ElementTree

with open('test.xml', mode='rt', encoding='utf-8') as f:
    xml_string = f.read()

root = ET.fromstring(xml_string)

tree = xml.etree.ElementTree.ElementTree(root)

tree.write('out.xml', encoding='utf-8', method='xml')

出力はこうなります。

<tip>
    <middle id="1">
        <bottom>content_1</bottom>
    </middle>
    <middle id="2">

        <bottom>いろは</bottom>
        <bottom>にほへと</bottom>
        <bottom />
    </middle>
    <middle id="3">
        content_3
    </middle>
</tip>

writeメソッドが使えるのは楽かも。

広告

PythonとXMLカテゴリの投稿