13

私は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()

ありがとう。

4

1 に答える 1

14

追加用にファイルを開きました。これにより、データが末尾に追加されます。モードを使用して、代わりに書き込み用にファイルを開きwます。さらに良い.write()ことに、ElementTree オブジェクトでメソッドを使用するだけです。

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="  ")

たとえば、ミニドムの美化トリック。

于 2013-01-21T14:12:25.900 に答える