如何制作没有根标签的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>'
我不想使用正则表达式来删除根标记。
如果您需要所有子元素的文本表示形式而不使用根元素,则可以执行以下操作:
subels = ''.join([etree.tostring(el).decode('ascii') for el in html])
html
是您问题的Element
。在本例中subels
是一个字符串:
'<div class="foo"/><p>bar</p>'
这可以进一步改进,以便使用iter
方法仅获取特定标记。例如:
subels = ''.join([etree.tostring(el).decode('ascii') for el in html.iter('div', 'p'])
将仅返回'div'
和'p'
标签,因此如果有其他标签,它们将被省略.
您可以使用它来过滤掉不需要的标签,但要小心,因为它可能会破坏文档层次结构:它仍然返回不需要的标签的子标签。
评论后编辑
如果根标记具有您要保留的文本属性,只需将其添加回来即可。
subels = ''.join([html.text] + [etree.tostring(el).decode('ascii') for el in html])