在LXML文本元素中用HTML标签替换文本
我有一些 lxml
元素:
>> lxml_element.text
'hello BREAK world'
我需要把单词 BREAK
替换成一个 HTML 换行标签——<br />
。我尝试过简单的文本替换:
lxml_element.text.replace('BREAK', '<br />')
但是它插入的标签变成了转义符号,比如 <br/>
。我该怎么解决这个问题呢?
2 个回答
2
我觉得你不只是想改变元素的文本内容。你可能想做的是修改你的 Element
的 text
节点,然后在你的 lxml_element
中添加一个名为 br
的 SubElement
,接着把这个子元素的 tail
属性设置为你正在解析的字符串的第二部分。我发现这里的教程很有用:http://lxml.de/tutorial.html#the-element-class。
6
下面是你可以这样做的。首先,设置一个你提问中提到的 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'
接下来,创建一个子元素标签 <br>:
>>> childbr = lxml.etree.SubElement(root, "br")
>>> childbr
<Element br at 0x3f35b40>
>>> lxml.etree.tostring(root)
'<b>hello BREAK world<br/></b>'
但这还不是你想要的。你需要把 <br> 之前的文本放到 .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>'