красиво добавить дополнительные строки в xml

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

import xml.etree.ElementTree as xml
import xml.dom.minidom as  minidom
from lxml import etree

def prettify(elem):
    rough_string = xml.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="\t")


cid = "[123,123,123,123,123]"

doc = xml.parse('test.xml')
root = doc.getroot()

root.getchildren().index(root.find('card'))

e = xml.Element('card')
e.set('id', cid)
n = xml.SubElement(e, "name")
n.text = "FOLDER"
r = xml.SubElement(e, "red")
r.text = "FILE.AVI"
g = xml.SubElement(e, "green")
g.text = "FILE.AVI"
b = xml.SubElement(e, "blue")
b.text = "FILE.AVI"

root.insert(0, e)

doc2 =  prettify(root)

with open("testnew.xml", "w") as f:
    f.write(doc2)

Ниже то, что я получаю в файле

<data>


    <card id="[123,123,123,123,123]">
            <name>FOLDER</name>
            <red>FILE.AVI</red>
            <green>FILE.AVI</green>
            <blue>FILE.AVI</blue>
    </card>
    <card id="[000,000,000,000,000]">


            <name>Colours</name>


            <red>/media/usb/cow.avi</red>


            <green>/media/usb/pig.avi</green>


            <blue>/media/usb/cat.avi</blue>


    </card>


</data>

входной файл "test.xml" выглядит так

<data>
   <card id="[000,000,000,000,000]">
        <name>Colours</name>
        <red>/media/usb/cow.avi</red>
        <green>/media/usb/pig.avi</green>
        <blue>/media/usb/cat.avi</blue>
   </card>
</data>

person LeeEng    schedule 13.10.2016    source источник
comment
Как выглядит входной файл test.xml?   -  person barny    schedule 13.10.2016
comment
@barny см. выше ввод xml   -  person LeeEng    schedule 13.10.2016


Ответы (1)


Добавленный новый контент печатается нормально. Удаление любого «приукрашивания» существующего текста решает проблему.

Добавлять

for elem in root.iter('*'):
    if elem == e:
        print "Added XML node does not need to be stripped"
        continue
    if elem.text is not None:
        elem.text = elem.text.strip()
    if elem.tail is not None:
        elem.tail = elem.tail.strip()

прежде чем звонить

 doc2 =  prettify(root)

Связанный ответ: Python, как удалить пробелы из xml текстовые узлы

person Rubbal    schedule 13.10.2016