Невозможно вставить строку в правильный подраздел в XML-файле, используя дерево элементов - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь добавить строку в XML-файл, используя ElementTree в Python 3.4.Но я не могу получить это в нужном разделе.

Строка:

<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>

1 Ответ

0 голосов
/ 18 февраля 2019

Не создавать новый родительский элемент.Вместо этого получите ссылку на существующий родительский элемент и добавьте новый элемент к нему.

Исходный файл 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>
...