XML Declaration standalone=“yes” lxml

前端 未结 5 1190
暗喜
暗喜 2020-12-20 13:01

I have an xml I am parsing, making some changes and saving out to a new file. It has the declaration

相关标签:
5条回答
  • 2020-12-20 13:07

    If you want to show the standalone='no' argument in your XML header, you have to set it to False instead of 'no'. Just like this:

    etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8', standalone=False)
    

    If not, standalone will be set to 'yes' by default.

    0 讨论(0)
  • 2020-12-20 13:13
    etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8')
    

    Will add the declaration if you're using lxml, however I noticed their declaration uses semi-quotes instead of full quotes.

    You can also get the exact declaration you want by just concatenating the output with a static string you need:

    xml = etree.tostring(tree, pretty_print = True, encoding='UTF-8')
    xml = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\n' + xml
    
    0 讨论(0)
  • 2020-12-20 13:18

    If You want to disable outputting standalone at all pass None instead of True or False. Sounds logical but took some time to actually find and test it.

    etree.tostring(tree, xml_declaration = True, encoding='utf-8', standalone=None)
    

    or using context manager and stream etree.xmlfile serialization:

    with etree.xmlfile(open('/tmp/test.xml'), encoding='utf-8') as xf:
        xf.write_declaration(standalone=None)
        with xf.element('html'):
            with xf.element('body'):
                element = etree.Element('p')
                element.text = 'This is paragraph'
                xf.write(element)
    
    0 讨论(0)
  • 2020-12-20 13:22

    Specify standalone using tree.docinfo.standalone.

    Try following:

    from lxml import etree
    tree = etree.fromstring(templateXml).getroottree() # NOTE: .getroottree()
    
    xmlFileOut = '/Users/User1/Desktop/Python/Done.xml'   
    
    with open(xmlFileOut, "w") as f:
        f.write(etree.tostring(tree, pretty_print=True, xml_declaration=True,
                               encoding=tree.docinfo.encoding,
                               standalone=tree.docinfo.standalone))
    
    0 讨论(0)
  • 2020-12-20 13:29

    You can pass standalone keyword argument to tostring():

    etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8', standalone=True)
    
    0 讨论(0)
提交回复
热议问题