无法使用元素树将一行插入到 xml 文件的正确小节中

Cannot insert a line into the correct subsection in an xml file using element tree

我正在尝试使用 Python 3.4 中的 ElementTree 将一行添加到 xml 文件中。但我似乎无法将其放入正确的部分。

行是:

<SessionConfiguration File="TestOption1.Invalid.xml" Name="Option3" />

进入配置文件,如下所示:

<Manager>
  <ConfigurationFiles>
    <SessionConfiguration File="TestOption1.valid.xml" Name="Option1" />
    <SessionConfiguration File="TestOption2.valid.xml" Name="Option2" />
    <SessionConfiguration File="TestOption1.Invalid.xml" Name="Option3" />
  </ConfigurationFiles>
</Manager>

代码:

    file = "config.xml"
    parent = et.Element("ConfigurationFiles")
    node = et.SubElement(parent, 'SessionConfiguration', Name='Option3', File='TestOption1.Invalid.xml')
    tree = et.parse(file) 
    root = tree.getroot()
    root.insert(2, node)
    tree.write(file)

问题是我似乎无法插入 [ConfigurationFiles],但它出现在它之前。

<Manager>
  <SessionConfiguration="TestOption1.Invalid.xml" Name="Option3" />
    <ConfigurationFiles>
        <SessionConfiguration File="TestOption1.valid.xml" Name="Option1" />
        <SessionConfiguration File="TestOption2.valid.xml" Name="Option2" />
    </ConfigurationFiles>

不要创建新的父元素。相反,获取对现有父元素的引用和 append 它的新元素。

原文config.xml:

<Manager>
  <ConfigurationFiles>
    <SessionConfiguration File="TestOption1.valid.xml" Name="Option1" />
    <SessionConfiguration File="TestOption2.valid.xml" Name="Option2" />
  </ConfigurationFiles>
</Manager>

代码:

from xml.etree import ElementTree as et

file = "config.xml"
tree = et.parse(file) 

# Find the parent 
parent = tree.find(".//ConfigurationFiles")

# Create the new element
node = et.Element('SessionConfiguration', Name='Option3', File='TestOption1.Invalid.xml')

# Append the new element
parent.append(node)

tree.write("config2.xml")

config2.xml 中的结果输出:

<Manager>
  <ConfigurationFiles>
    <SessionConfiguration File="TestOption1.valid.xml" Name="Option1" />
    <SessionConfiguration File="TestOption2.valid.xml" Name="Option2" />
  <SessionConfiguration File="TestOption1.Invalid.xml" Name="Option3" /></ConfigurationFiles>
</Manager>