Заменить текст тегом HTML в текстовом элементе LXML - PullRequest
5 голосов
/ 30 августа 2011

У меня есть элемент lxml:

>> lxml_element.text
  'hello BREAK world'

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

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

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

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

Вот как ты мог это сделать.Настройка примера 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>'
2 голосов
/ 30 августа 2011

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

...