2010-06-29 7 views
8

J'utilise ElementTree pour générer du code HTML, mais j'ai rencontré le problème selon lequel ElementTree ne stocke pas le texte en tant que nœud, mais en tant que propriétés text et tail de Element. Ceci est un problème si je veux générer quelque chose qui nécessiterait plusieurs nœuds de texte, par exemple:Plusieurs nœuds de texte dans ElementTree de Python? Génération HTML

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

Pour autant que je peux dire qu'il n'y a aucun moyen de générer this- suis-je manque quelque chose? Ou, y a-t-il une meilleure solution pour une génération HTML rapide et simple en Python?

Répondre

11

Pour générer la chaîne ci-dessus avec ElementTree, vous pouvez utiliser le code suivant. L'astuce à ceci est que le text est le tout premier lot de texte avant l'élément suivant et le tail est tout le texte après l'élément jusqu'à l'élément suivant.

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

"queue est tout le texte après l'élément jusqu'à l'élément suivant." Ah, c'est ce que je n'ai pas réalisé. Merci! –