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

6

我有一些lxml元素:

>> lxml_element.text
  'hello BREAK world'

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

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

但它插入的标签带有转义符,比如&lt;br/&gt;。我该如何解决这个问题?
2个回答

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>'

1
我遇到了同样的问题,这个解决方案虽然可行,但使用起来很麻烦。难道没有更简单的解决方案或开箱即用的函数吗? - aronadaal
一个问题在于如果尾部包含其他标签,它们会用转义的HTML实体(如<)编写。 - yucer

2

我认为您不仅仅想要更改元素的文本节点。我认为您想要做的是修改您的Element文本节点并向您的lxml_element添加名为brSubElement,然后将子元素的tail属性设置为解析字符串的第二部分。我发现这里的教程非常有用:http://lxml.de/tutorial.html#the-element-class


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接