Задать вопрос

Почему сбивается форматирование в xml при использовании ElementTree.write()?

Имеется xml конфиг-файл.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Cache>
		<Index ID="DATE_INDEX">
			<FieldName Name="id"/>
			<FieldName Name="start_time"/>
			<FieldName Name="stop_time"/>
		</Index>
		<Index ID="USER_INDEX">
			<FieldName Name="id"/>
			<FieldName Name="username"/>
		</Index>
	</Cache>
	<Regions>
		<Region ID="0"   Folder="Unknown"/>
		<Region ID="100" Folder="MSK"/>
		<Region ID="200" Folder="SPB"/>
		<Region ID="300" Folder="PTZ"/>
	</Regions>
</Configuration>


для модификации файла (Изменения существующей записи) я использую:

config_file = 'config.xml'
xml_config = ET.parse(config_file)
root = xml_config.getroot()
root[1][1].attrib['Folder'] = 'Capital'
xml_config.write('out.xml')


Все работает отлично:
<Regions>
		<Region Folder="Unknown" ID="0" />
		<Region Folder="Capital" ID="100" />
		<Region Folder="SPB" ID="200" />
		<Region Folder="PTZ" ID="300" />
	</Regions>


Для того чтоб добавить запись:
ET.SubElement(root[1], 'Region', {'Folder':"Ural", "ID":"400"})


но на выходе слетает редактирование:
Должно быть:
<Regions>
		<Region Folder="Unknown" ID="0" />
		<Region Folder="Capital" ID="100" />
		<Region Folder="SPB" ID="200" />
		<Region Folder="PTZ" ID="300" />
		<Region Folder="Ural" ID="400" />
	</Regions>

а получаю это:
<Regions>
		<Region Folder="Unknown" ID="0" />
		<Region Folder="Capital" ID="100" />
		<Region Folder="SPB" ID="200" />
		<Region Folder="PTZ" ID="300" />
	<Region Folder="Ural" ID="400" /></Regions>

Как это можно исправить?
  • Вопрос задан
  • 359 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@Norkotik Автор вопроса
Сделал такой workaround:
def Save_Xml_Pretty(elem, file):
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    out = reparsed.toprettyxml(indent="\t")
    open(file, 'w').writelines(out)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы