Заменить текст тегом HTML в текстовом элементе LXML
У меня есть некоторый lxml
Элемент:
>> lxml_element.text
'hello BREAK world'
Мне нужно заменить слово BREAK
тегом HTML break-<br />
. Я попытался сделать простую замену текста:
lxml_element.text.replace('BREAK', '<br />')
Но он вставляет тег с экранированными символами, такими как <br/>
. Как мне решить эту проблему?
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 быть очень полезным.