Заменить текст тегом HTML в текстовом элементе LXML


У меня есть некоторый lxml Элемент:

>> lxml_element.text
  'hello BREAK world'

Мне нужно заменить слово BREAK тегом HTML break-<br />. Я попытался сделать простую замену текста:

lxml_element.text.replace('BREAK', '<br />')

Но он вставляет тег с экранированными символами, такими как &lt;br/&gt;. Как мне решить эту проблему?

2 3

2 ответа:

Вот как вы могли бы это сделать. Настройка примера lxml из вашего вопроса:

>>> import lxml
>>> some_data = "<b>hello BREAK world</b>"
>>> root = lxml.etree.fromstring(some_data)
>>> root
<Element b at 0x3f35a50>
>>> root.text
'hello BREAK world'

Далее создайте тег подэлемента
:

>>> childbr = lxml.etree.SubElement(root, "br")
>>> childbr
<Element br at 0x3f35b40>
>>> lxml.etree.tostring(root)
'<b>hello BREAK world<br/></b>'
Но это еще не все, чего ты хочешь. Вы должны взять текст перед
и поместить его в .text:
>>> root.text = "hello"
>>> lxml.etree.tostring(root)
'<b>hello<br/></b>'

Затем установите .tail ребенка, чтобы он содержал остальную часть текста:

>>> childbr.tail = "world"
>>> lxml.etree.tostring(root)
'<b>hello<br/>world</b>'

Ну, я не думаю, что вы хотите просто изменить текстовый узел элемента. Я думаю, что вы хотите изменить узел text Вашего Element добавить SubElement имени br к вашему lxml_element, а затем установить атрибут tail вашего подэлемента во 2-ю часть строки, которую вы анализируете. Я нашел учебник здесь: http://lxml.de/tutorial.html#the-element-class быть очень полезным.