Я могу добавить узел XML с помощью ElementTree, но это возвращает вывод в одну строку вместо древовидной структуры, похожей на то, когда я открываю файл xml в текстовом формате. Я также пытался использовать minidom.toprettyxml, но не знаю, как добавить вывод в исходный XML. Поскольку я хотел бы, чтобы сценарий воспроизводился в других средах, я предпочитаю не использовать внешние библиотеки, такие как lxml. Может кто-нибудь, пожалуйста, помогите, как я могу красиво распечатать вывод? - питон 2.7
Образец XML. Вот так это выглядит как в текстовом формате, так и в проводнике.
<?xml version="1.0" encoding="utf-8"?>
<default_locators >
<locator_ref>
<name>cherry</name>
<display_name>cherrycherry</display_name>
<workspace_properties>
<factory_progid>Workspace</factory_progid>
<path>InstallDir</path>
</workspace_properties>
</locator_ref>
</default_locators>
Ожидаемый вывод как в текстовом формате, так и в проводнике.
<?xml version="1.0" encoding="utf-8"?>
<default_locators >
<locator_ref>
<name>cherry</name>
<display_name>cherrycherry</display_name>
<workspace_properties>
<factory_progid>Workspace</factory_progid>
<path>InstallDir</path>
</workspace_properties>
</locator_ref>
<locator_ref>
<name>berry</name>
<display_name>berryberry</display_name>
<workspace_properties>
<factory_progid>Workspace</factory_progid>
<path>C:\temp\temp</path>
</workspace_properties>
</locator_ref>
</default_locators>
Мой сценарий
#coding: cp932
import xml.etree.ElementTree as ET
tree = ET.parse(r"C:\DefaultLocators.xml")
root = tree.getroot()
locator_ref = ET.SubElement(root, "locator_ref")
name = ET.SubElement(locator_ref, "name")
name.text = " berry"
display_name = ET.SubElement(locator_ref, "display_name")
display_name.text = "berryberry"
workspace_properties = ET.SubElement(locator_ref, "workspace_properties")
factory_progid = ET.SubElement(workspace_properties,"factory_progid")
factory_progid.text = "Workspace"
path = ET.SubElement(workspace_properties, "path")
path.text = r"c:\temp\temp"
tree.write(r"C:\DefaultLocators.xml", encoding='utf-8')
Возвращенный вывод. После запуска моего скрипта в мой файл sample.xml добавляются новые узлы, но он возвращает вывод в одной строке, при этом все новые строки и отступы удаляются из исходного файла sample.xml. По крайней мере, так это выглядит, когда я открываю файл sample.xml в текстовом формате. Однако, когда я открываю файл sample.xml в проводнике, он выглядит нормально. Я все еще вижу новые строки и отступы, как и раньше. Как сохранить исходную древовидную структуру в текстовом формате даже после запуска скрипта?
<default_locators>
<locator_ref>
<name>cherry</name>
<display_name>cherrycherry</display_name>
<workspace_properties>
<factory_progid>Workspace</factory_progid>
<path>InstallDir</path>
</workspace_properties>
</locator_ref>
<locator_ref><name> berry</name><display_name>berryberry</display_name><workspace_properties><factory_progid>Workspace</factory_progid><path>c:\temp\temp</path></workspace_properties></locator_ref></default_locators>