我想以可區分的方式打印出etree(由html文檔形成)的樹結構(意味着兩個etrees應打印出不同的結果)。lxml(或lxml.html):打印樹結構
我的意思是結構是樹的「形狀」,它基本上意味着所有的標籤,但沒有屬性和文本內容。
有什麼想法?在lxml中有什麼要做的嗎?
如果不是,我想我必須迭代整個樹並從中構建一個字符串。任何想法如何以緊湊的方式表示樹? (「緊湊」功能不那麼相關)
僅供參考它並不是要查看,而是要存儲和哈希以便能夠在幾個html模板之間做出區別。
感謝
我想以可區分的方式打印出etree(由html文檔形成)的樹結構(意味着兩個etrees應打印出不同的結果)。lxml(或lxml.html):打印樹結構
我的意思是結構是樹的「形狀」,它基本上意味着所有的標籤,但沒有屬性和文本內容。
有什麼想法?在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>
有''.tostring()'方法不是爲你做的嗎? – kindall
是的,如果不清楚,對不起:我的意思是樹的結構基本上只是標籤,沒有文本,沒有任何屬性(添加問題) – lajarre
我不認爲LXML具有內置的這種功能,所以你必須走樹。 –