【发布时间】:2020-02-15 17:07:33
【问题描述】:
如何制作没有根标签的html文本(通常是<html></html>)?例如,用于 CDATA:
<![CDATA[<div class="foo"></div><p>bar</p>]]>
我的代码:
from lxml import etree
html = etree.Element('root')
etree.SubElement(html, 'div', attrib={'class':'foo'})
etree.SubElement(html, 'p').text='bar'
t = etree.tostring(html)
# '<root><div class="foo"/><p>bar</p></root>'
我不想使用正则表达式来删除根标签。
【问题讨论】:
-
不过只是打印的问题吗?据我所知,
etree.Element需要有根标签,不能删除。 -
为什么要删除根元素?如果要创建 CDATA 部分,请使用
etree.CDATA。 -
它可以
<![CDATA[<root><div class="foo"></div><p>bar</p></root>]]>,但是一些网络服务不接受额外的标签。 -
其他常见的情况,当需要从一些三方html页面中获取只有带有文本格式标签(
<b>等)的文本时,没有页面的结构标签,只会垃圾。要保存这样的格式化标签需要使用tostring(),然后是提到的正则表达式。这使得解析 html/xml、正则表达式、文本/xml 向前和向后转换的代码令人困惑......