我有一些lxml
元素:
>> lxml_element.text
'hello BREAK world'
我需要用HTML中断标记BREAK
替换单词<br />
。我试过做简单的文字替换:
lxml_element.text.replace('BREAK', '<br />')
但它会插入带有转义符号的代码,例如<br/>
。我该如何解决这个问题?
答案 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非常有用。