Заменить текст тегом 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 быть очень полезным.