gpt4 book ai didi

python - 使用 lxml 的 tostring() 从 xml/html 中删除根标签

转载 作者:行者123 更新时间:2023-12-04 04:23:37 24 4
gpt4 key购买 nike

如何制作没有根标签的 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])

关于python - 使用 lxml 的 tostring() 从 xml/html 中删除根标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com