Xmlファイルがあり、それに要素を追加しようとしています。 xmlには次の構造があります:
<root>
<OldNode/>
</root>
私が探しているのは:
<root>
<OldNode/>
<NewNode/>
</root>
しかし実際には次のxmlを取得しています:
<root>
<OldNode/>
</root>
<root>
<OldNode/>
<NewNode/>
</root>
私のコードは次のようになります:
file = open("/tmp/" + executionID +".xml", 'a')
xmlRoot = xml.parse("/tmp/" + executionID +".xml").getroot()
child = xml.Element("NewNode")
xmlRoot.append(child)
xml.ElementTree(root).write(file)
file.close()
ありがとう。
追加するファイルを開いたため、最後にデータが追加されます。代わりに、w
モードを使用して、書き込み用にファイルを開きます。さらに良いことに、ElementTreeオブジェクトで.write()
メソッドを使用するだけです。
_tree = xml.parse("/tmp/" + executionID +".xml")
xmlRoot = tree.getroot()
child = xml.Element("NewNode")
xmlRoot.append(child)
tree.write("/tmp/" + executionID +".xml")
_
.write()
メソッドを使用すると、エンコーディングを設定したり、必要に応じてXMLプロローグを強制的に書き込んだりできるという追加の利点があります。
必須開いているファイルを使用してXMLをプリティフィケーションする場合は、_'w'
_モードを使用します。_'a'
_は追加用のファイルを開き、観察した動作につながります。
_with open("/tmp/" + executionID +".xml", 'w') as output:
output.write(prettify(tree))
_
ここで、prettify
は次の行に沿ったものです。
_from xml.etree import ElementTree
from xml.dom import minidom
def prettify(elem):
"""Return a pretty-printed XML string for the Element.
"""
rough_string = ElementTree.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")
_
例えばミニダムのかわいらしいトリック。