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

6 投票
2 回答
4730 浏览
提问于 2025-04-17 00:35

我有一些 lxml 元素:

>> lxml_element.text
  'hello BREAK world'

我需要把单词 BREAK 替换成一个 HTML 换行标签——<br />。我尝试过简单的文本替换:

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

但是它插入的标签变成了转义符号,比如 &lt;br/&gt;。我该怎么解决这个问题呢?

2 个回答

2

我觉得你不只是想改变元素的文本内容。你可能想做的是修改你的 Elementtext 节点,然后在你的 lxml_element 中添加一个名为 brSubElement,接着把这个子元素的 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>'

撰写回答