Pretty printing XML in Python

后端 未结 26 1790
一个人的身影
一个人的身影 2020-11-22 02:18

What is the best way (or are the various ways) to pretty print XML in Python?

26条回答
  •  伪装坚强ぢ
    2020-11-22 02:55

    I had this problem and solved it like this:

    def write_xml_file (self, file, xml_root_element, xml_declaration=False, pretty_print=False, encoding='unicode', indent='\t'):
        pretty_printed_xml = etree.tostring(xml_root_element, xml_declaration=xml_declaration, pretty_print=pretty_print, encoding=encoding)
        if pretty_print: pretty_printed_xml = pretty_printed_xml.replace('  ', indent)
        file.write(pretty_printed_xml)
    

    In my code this method is called like this:

    try:
        with open(file_path, 'w') as file:
            file.write('')
    
            # create some xml content using etree ...
    
            xml_parser = XMLParser()
            xml_parser.write_xml_file(file, xml_root, xml_declaration=False, pretty_print=True, encoding='unicode', indent='\t')
    
    except IOError:
        print("Error while writing in log file!")
    

    This works only because etree by default uses two spaces to indent, which I don't find very much emphasizing the indentation and therefore not pretty. I couldn't ind any setting for etree or parameter for any function to change the standard etree indent. I like how easy it is to use etree, but this was really annoying me.

提交回复
热议问题