2010-06-29 9 views
8

Estoy usando ElementTree para generar algo de HTML, pero me he encontrado con el problema de que ElementTree no almacena texto como un nodo, sino como las propiedades text y tail de Element. Este es un problema si quiero generar algo que requeriría múltiples nodos de texto, por ejemplo:¿Múltiples nodos de texto en ElementTree de Python? Generación de HTML

<a>text1 <b>text2</b> text3 <b>text4</b> text5</a> 

Por lo que yo puedo decir que no hay manera de generar esto- me estoy perdiendo algo? ¿O hay una mejor solución para la generación de HTML rápida y sencilla en Python?

Respuesta

11

Para generar la cadena anterior con ElementTree puede usar el siguiente código. El truco para esto es que el text es el primer lote de texto antes del siguiente elemento y el tail es todo el texto después del elemento hasta el siguiente elemento.

import xml.etree.ElementTree as ET 
root = ET.Element("a") 
root.text = 'text1 ' #First Text in the Element a 
b = ET.SubElement(root, "b") 
b.text = 'text2' #Text in the first b 
b.tail = ' text3 ' #Text immediately after the first b but before the second 
b = ET.SubElement(root, "b") 
b.text = 'text4' 
b.tail = ' text5' 
print ET.tostring(root) 
#This prints <a>text1 <b>text2</b> text3 <b>text4</b> text5</a> 
+0

"cola es todo el texto después del elemento hasta el próximo elemento." Ah, eso es de lo que no me había dado cuenta. ¡Gracias! –

Cuestiones relacionadas