Declaración XML standalone = “sí” lxml

Tengo un xml que estoy analizando, haciendo algunos cambios y guardando en un nuevo archivo. Tiene la statement Que me gustaría conservar. Cuando estoy guardando mi nuevo archivo, estoy perdiendo el bit standalone="yes" . ¿Cómo puedo mantenerlo? Aquí está mi código:

 templateXml = """  Some Data Some Other Data """ from lxml import etree tree = etree.fromstring(templateXml) 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='UTF-8')) 

Puede pasar un argumento de palabra clave standalone a tostring() :

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

Especifique standalone utilizando tree.docinfo.standalone .

Trate de seguir

 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)) 

Si desea mostrar el argumento standalone='no' en su encabezado XML, debe establecerlo en False lugar de ‘no’. Así como esto:

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

De lo contrario, la opción independiente se establecerá en ‘sí’ de manera predeterminada.

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

Agregará la statement si está usando lxml, sin embargo, noté que su statement usa comillas en lugar de comillas completas.

También puede obtener la statement exacta que desea simplemente concatenando la salida con una cadena estática que necesita:

 xml = etree.tostring(tree, pretty_print = True, encoding='UTF-8') xml = '\n' + xml 

Si desea deshabilitar la salida standalone en todos, pase None lugar de True o False . Suena lógico, pero tomó algún tiempo para encontrarlo y probarlo.

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

o utilizando el administrador de contexto y la secuenciación de la serialización de etree.xmlfile :

 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)