簡體   English   中英

當我向已解析的樹添加標簽時,lxml中的漂亮打印失敗

[英]Pretty print in lxml is failing when I add tags to a parsed tree

我有一個xml文件,我正在使用lxml中的etree來處理,但是當我向它添加標簽時,漂亮的打印似乎不起作用。

>>> from lxml import etree
>>> root = etree.parse('file.xml').getroot()
>>> print etree.tostring(root, pretty_print = True)

<root>
  <x>
    <y>test1</y>
  </x>
</root>

到現在為止還挺好。 但現在

>>> x = root.find('x')
>>> z = etree.SubElement(x, 'z')
>>> etree.SubElement(z, 'z1').attrib['value'] = 'val1'
>>> print etree.tostring(root, pretty_print = True)

<root>
  <x>
    <y>test1</y>
  <z><z1 value="val1"/></z></x>
</root>

它不再漂亮了。 我還試圖“向后”創建z1標簽,然后創建z標簽並將z1附加到它,然后將z標簽附加到x標簽。 但我得到了相同的結果。

如果我不解析文件並只是一次創建所有標簽,它將正確打印。 所以我認為它與解析文件有關。

如何讓漂亮的印刷工作?

它與lxml如何處理空格有關 - 有關詳細信息,請參閱lxml常見問題解答

要解決此問題,請將文件的加載部分更改為以下內容:

parser = etree.XMLParser(remove_blank_text=True)
root = etree.parse('file.xml', parser).getroot()

我沒有對它進行測試,但它應該通過此更改縮進您的文件。

我在寫文件時遇到了同樣的問題,其他人遇到此問題:

在運行main函數后,我創建了一個輔助函數pretty_prints。

from lxml import etree

def ppxml(xml):
    parser = etree.XMLParser(remove_blank_text=True)
    tree = etree.parse(xml, parser)
    tree.write(xml, encoding='utf-8', pretty_print=True, xml_declaration=True)

在我的主程序文件中

if __name__ == '__main__':
    main()
    ppxml(xml)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM