Cerrar una etiqueta sin texto en lxml

Estoy tratando de generar un archivo XML usando Python y lxml

Sin embargo, observo una cosa que si una etiqueta no tiene texto, no se cierra sola. Un ejemplo de esto sería:

root = etree.Element('document') rootTree = etree.ElementTree(root) firstChild = etree.SubElement(root, 'test') 

La salida de esto es:

   </document 

Quiero que la salida sea:

     

Básicamente, quiero cerrar una etiqueta que no tiene texto, pero se usa para el valor del atributo. ¿Cómo puedo hacer eso? Y también, ¿cómo se llama esa etiqueta? Lo habría buscado en Google, pero no sé cómo buscarlo.

Tenga en cuenta que y significan exactamente lo mismo. Lo que quieres es que la etiqueta de prueba tenga un texto que consista en un solo salto de línea. Sin embargo, una etiqueta vacía sin texto generalmente se escribe como y tiene muy poco sentido insistir en que aparezca como .

Para aclarar la respuesta de @ymv en caso de que pueda ser de ayuda para otros:

 from lxml import etree root = etree.Element('document') rootTree = etree.ElementTree(root) firstChild = etree.SubElement(root, 'test') print(etree.tostring(root, method='html')) ### b'' 

Use lxml.html.tostring para serializar a HTML

 import lxml.html root = lxml.html.fromstring(mydocument) print(lxml.html.tostring(root)) 

Use una cadena vacía como esta:

 root = etree.Element('document') etree.SubElement(root, 'test').text = ''