python - 使用 lxml 的 tostring() 从 xml/html 中删除根标签
问题描述
如何制作没有根标签的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'
and'p'
标签,因此如果有其他标签,它们将被省略。
您可以使用它来过滤掉不需要的标签,但要小心,因为它可能会破坏文档层次结构:它仍然会返回不需要标签的子标签。
评论后编辑
如果根标签有您想要保留的文本属性,只需将其添加回来。
subels = ''.join([html.text] + [etree.tostring(el).decode('ascii') for el in html])
推荐阅读
- javascript - 根据其他单元格在表格中显示按钮
- vue.js - Vuejs在调用api rest方法后为变量赋值的问题
- python - 有没有办法在后台(乳胶)运行python shell?
- java - 更改 JPanel 的颜色和尺寸不起作用
- ruby - 如何生成然后重定向到 Sinatra 中生成的链接?
- php - 用于检查 url 前缀的 preg_grep 模式
- swift - Swift 数字和单型集合
- javascript - 如何让我的按钮在显示国家/地区后正确显示一个国家/地区的完整描述
- angular - 将参数传递给 Angular 7 模板驱动的表单自定义验证器
- r - 读取 .csv 文件的一部分