Anscheinend macht `lxml` kein "pretty printing" wenn so etwas schon in der Quelle war. Das erste was Du siehst ist nämlich nicht von `lxml`, dass heisst die Ausgabe würde mit ``pretty_printing=False`` genau so aussehen.
Code: Alles auswählen
In [149]: a = etree.XML('<Doc>\n <altes_element />\n <noch_ein_altes />\n</Doc>')
In [150]: print etree.tostring(a, pretty_print=False)
<Doc>
<altes_element/>
<noch_ein_altes/>
</Doc>
In [151]: kind1 = etree.SubElement(a, 'kind1')
In [152]: kind2 = etree.SubElement(kind1, 'kind2')
In [153]: print etree.tostring(a, pretty_print=True)
<Doc>
<altes_element/>
<noch_ein_altes/>
<kind1><kind2/></kind1></Doc>
Letztendlich ist "pretty printing" von XML auch nicht so einfach wie es auf den ersten Blick aussieht, weil der "pretty printer" dazu eigentlich wissen muss, wo Textknoten stehen dürfen und wo nicht. Man braucht dazu also zwingend ein DTD, Schema oder ähnliches, wo diese Information ersichtlich ist.