Несколько текстовых узлов в ElementTree Python?Генерация HTML - PullRequest
9 голосов
/ 30 июня 2010

Я использую ElementTree для генерации некоторого HTML, но я столкнулся с проблемой, что ElementTree хранит текст не как узел, а как свойства text и tail Element.Это проблема, если я хочу сгенерировать что-то, что потребует нескольких текстовых узлов, например:

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

Насколько я могу судить, нет способа сгенерировать это - я что-то упустил?Или есть лучшее решение для быстрой и простой генерации HTML в Python?

1 Ответ

12 голосов
/ 07 июля 2010

Для генерации вышеуказанной строки с ElementTree вы можете использовать следующий код. Хитрость в том, что text - это самая первая партия текста перед следующим элементом, а tail - это весь текст после элемента до следующего элемента.

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