在LXML文本元素中用HTML标记替换文本

时间:2011-08-29 22:37:08

标签: python lxml

我有一些lxml元素:

>> lxml_element.text
  'hello BREAK world'

我需要用HTML中断标记BREAK替换单词<br />。我试过做简单的文字替换:

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

但它会插入带有转义符号的代码,例如&lt;br/&gt;。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

这是你如何做到的。从您的问题中设置样本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'

接下来,创建一个子元素标签&lt; br&gt;:

>>> childbr = lxml.etree.SubElement(root, "br")
>>> childbr
<Element br at 0x3f35b40>
>>> lxml.etree.tostring(root)
'<b>hello BREAK world<br/></b>'

但这不是你想要的全部。您必须在&lt; br&gt;之前获取文本。并将其放在.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>'

答案 1 :(得分:2)

好吧,我认为你不想只改变元素的文本节点。我认为您要做的是修改text的{​​{1}}节点,将Element名称SubElement添加到br,然后设置{ {1}}子元素的属性到您正在解析的字符串的第二部分。我在这里找到了教程:http://lxml.de/tutorial.html#the-element-class非常有用。