[Python] Pretty print in lxml is failing when I add tags to a parsed tree

Discussão em 'Python' iniciado por Stack, Junho 18, 2025.

  1. Stack

    Stack Membro Participativo

    I have an xml file that I'm using etree from lxml to work with, but when I add tags to it, pretty printing doesn't seem to work.

    >>> from lxml import etree
    >>> root = etree.parse('file.xml').getroot()
    >>> print etree.tostring(root, pretty_print = True)

    <root>
    <x>
    <y>test1</y>
    </x>
    </root>


    So far so good. But now

    >>> x = root.find('x')
    >>> z = etree.SubElement(x, 'z')
    >>> etree.SubElement(z, 'z1').attrib['value'] = 'val1'
    >>> print etree.tostring(root, pretty_print = True)

    <root>
    <x>
    <y>test1</y>
    <z><z1 value="val1"/></z></x>
    </root>


    it's no longer pretty. I've also tried to do it "backwards" where I create the z1 tag, then create the z tag and append z1 to it, then append the z tag to the x tag. But I get the same result.

    If I don't parse the file and just create all the tags in one go, it'll print correctly. So I think it has something to do with parsing the file.

    How can I get pretty printing to work?

    Continue reading...

Compartilhe esta Página