gpt4 book ai didi

python - lxml(或 lxml.html): print tree structure

转载 作者:技术小花猫 更新时间:2023-10-29 12:33:43 25 4
gpt4 key购买 nike

我想以可区分的方式打印出 etree 的树结构(由 html 文档形成)(意味着两个 etree 应该以不同的方式打印出来)。

我所说的结构是指树的“形状”,基本上是指所有标签,但没有属性,也没有文本内容。

有什么想法吗? lxml 中有什么可以做到这一点吗?

如果不是,我想我必须遍历整个树并从中构造一个字符串。知道如何以紧凑的方式表示树吗? (“紧凑”功能不太相关)

仅供引用,它不是用来查看的,而是用来存储和散列的,以便能够在多个 html 模板之间进行区分。

谢谢

最佳答案

也许只是在源 XML 上运行一些 XSLT 以去除标签以外的所有内容,然后使用 etree.tostring 来获取可以散列的字符串就足够容易了...

from lxml import etree as ET

def pp(e):
print ET.tostring(e, pretty_print=True)
print

root = ET.XML("""\
<project id="8dce5d94-4273-47ef-8d1b-0c7882f91caa" kpf_version="4">
<livefolder id="8744bc67-1b9e-443d-ba9f-96e1d0007ba8" idref="707cd68a-33b5-4051-9e40-8ba686c2fdb8">Mooo</livefolder>
<livefolder id="8744bc67-1b9e-443d-ba9f" idref="707cd68a-33b5-4051-9e40-8ba686c2fdb8" />
<preference-set idref="8dce5d94-4273-47ef-8d1b-0c7882f91caa">
<boolean id="import_live">0</boolean>
</preference-set>
</project>
""")
pp(root)


xslt = ET.XML("""\
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
""")
tr = ET.XSLT(xslt)

doc2 = tr(root)
root2 = doc2.getroot()
pp(root2)

给你输出:

<project id="8dce5d94-4273-47ef-8d1b-0c7882f91caa" kpf_version="4">
<livefolder id="8744bc67-1b9e-443d-ba9f-96e1d0007ba8" idref="707cd68a-33b5-4051-9e40-8ba686c2fdb8">Mooo</livefolder>
<livefolder id="8744bc67-1b9e-443d-ba9f" idref="707cd68a-33b5-4051-9e40-8ba686c2fdb8"/>
<preference-set idref="8dce5d94-4273-47ef-8d1b-0c7882f91caa">
<boolean id="import_live">0</boolean>
</preference-set>
</project>

<project>
<livefolder/>
<livefolder/>
<preference-set>
<boolean/>
</preference-set>
</project>

关于python - lxml(或 lxml.html): print tree structure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093091/

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