root
содержит ваши изменения, вы можете просмотреть их, используя вызов ElementTree dump()
.Так как мы знаем, что root содержит ваши изменения, вам нужно будет сохранить root, преобразовав его в ElementTree
и вызвав на нем write()
:
import xml.etree.ElementTree as ET
fields = """
<fields>
<field>
<column/>
<description/>
<datatype/>
<length/>
</field>
<field>
<column/>
<description/>
<datatype/>
<length/>
</field>
</fields>
"""
#Insert new field into <fields>
root = ET.fromstring(fields)
new_field = ET.Element("field")
field_col = ET.SubElement(new_field, "column")
field_des = ET.SubElement(new_field, "description")
field_data = ET.SubElement(new_field, "datatype")
field_length = ET.SubElement(new_field, "length")
root.insert(0, new_field)
ET.dump(root)
tree = ET.ElementTree(root)
tree.write(open('test.xml','w'), encoding='unicode')
Распечатает и произведетфайл test.xml
с тем же содержанием:
<fields>
<field><column /><description /><datatype /><length /></field><field>
<column />
<description />
<datatype />
<length />
</field>
<field>
<column />
<description />
<datatype />
<length />
</field>
</fields>
Отредактировано в соответствии с отредактированным вопросом: пожалуйста, прекратите редактировать свой вопрос, чтобы он отличался от исходного.
В любом случае, insert()
берет индекс, в котором вы хотите разместить новый элемент, так как вы хотите, чтобы ваш новый элемент находился в третьем слоте (2-й индекс, поскольку индекс начинается с 0), просто передайте его 2 вместо0:
root.insert(2, new_field)
Который будет производить:
<fields>
<field>
<column />
<description />
<datatype />
<length />
</field>
<field>
<column />
<description />
<datatype />
<length />
</field>
<field><column /><description /><datatype /><length /></field></fields>