Моя попытка

from lxml import objectify,etree
xml = """<?xml version='1.0' encoding='windows-1252'?>
<Connection>
  <FileList> 
  </FileList>
</Connection>"""

root = etree.fromstring(xml.encode('utf-8'))
e = root.find('.//FileList')
path = r'/home/xyz/xml/text'
extn = r'.xml'


for i in range(1,3):    
    file = etree.SubElement(e,'File')
    file.text = ''.join([path,str(i),extn])

print(etree.tostring(root,pretty_print=True))

Но мой код генерирует что-то вроде

b'<Connection>\n  <FileList> \n  <File>/home/xyz/xml/text1.xml</File><File>/home/xyz/xml/text2.xml</File></FileList>\n</
Connection>\n'

Я хочу что-то вроде этого

<Connection>
<FileList>
    <File>/home/xyz/xml/text1.xml</File>
    <File>/home/xyz/xml/text2.xml</File>
</FileList>
</Connection>
1
jhon.smith 1 Апр 2014 в 13:12
1
Они равны в том, что касается структуры XML. Вы хотите красиво распечатать XML?
 – 
user1907906
1 Апр 2014 в 13:14
Я пробовал изрядно распечатать его, но все же красивый вид печати все портит, не так ли?
 – 
jhon.smith
1 Апр 2014 в 13:22
Что решить? XML уже является тем, что вам нужно, включая разрывы строк и все такое.
 – 
user1907906
1 Апр 2014 в 13:23
Дочерние элементы XML кажутся напечатанными в одной строке /home/xyz/xml/text1.xml /home/xyz/xml/text2.xml
 – 
jhon.smith
1 Апр 2014 в 13:26

1 ответ

Лучший ответ

У вас уже есть то, что вы хотите.

s = b'<Connection>\n  <FileList> \n  <File>/home/xyz/xml/text1.xml</File><File>/home/xyz/xml/text2.xml</File></FileList>\n</Connection>\n'
with open("o.xml", "w") as o:                                                                                                             
    print(s.decode("UTF-8"), file=o)

Теперь посмотрим на результат.

$ cat o.xml
<Connection>
  <FileList> 
  <File>/home/xyz/xml/text1.xml</File><File>/home/xyz/xml/text2.xml</File></FileList>
</Connection>
0
user1907906user1907906 1 Апр 2014 в 13:27
Извините, вы правы, я открыл документ в firefox и дал мне желаемый результат
 – 
jhon.smith
1 Апр 2014 в 13:31