2010-06-29 4 views
8

Uso ElementTree per generare un codice HTML, ma ho riscontrato il problema che ElementTree non memorizza il testo come nodo, ma come proprietà text e tail di Element. Questo è un problema se voglio generare qualcosa che richiederebbe più nodi di testo, ad esempio:Più nodi di testo in ElementTree di Python? Generazione HTML

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

Per quanto posso dire non v'è alcun modo per generare questo- mi sto perdendo qualcosa? Oppure, esiste una soluzione migliore per la generazione HTML rapida e semplice in Python?

risposta

11

Per generare la stringa sopra con ElementTree è possibile utilizzare il seguente codice. Il trucco per questo è che il text è il primo lotto di testo prima del prossimo elemento e lo tail è tutto il testo dopo l'elemento fino all'elemento successivo.

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

"coda è tutto il testo dopo l'elemento fino all'elemento successivo." Ah, questo è quello che non avevo realizzato. Grazie! –