Python:lxml并不能很好地打印新添加的节点

时间:2016-08-26 17:59:50

标签: python xml lxml

我使用Python脚本在XML文件中添加节点(或复制现有节点)。该脚本使用lxml库。这是现有的片段:

<entitlements>
    <bpuiEnabledForSubusers>true</bpuiEnabledForSubusers>
    <appCodesAllowedForSubusers>My Accounts,Bill Pay</appCodesAllowedForSubusers>
    <enabled>true</enabled>
    <monitored>true</monitored>
</entitlements>

所以我使用lxml来复制权利节点中的节点。然后,当我

return etree.tostring(self.root,encoding='unicode', pretty_print=True)

我得到以下xml:

<entitlements>
    <bpuiEnabledForSubusers>true</bpuiEnabledForSubusers>
    <appCodesAllowedForSubusers>My Accounts,Bill Pay</appCodesAllowedForSubusers>
    <enabled>true</enabled>
    <monitored>true</monitored>
<appCodesAllowedForSubusersCopy>My Accounts,Bill Pay</appCodesAllowedForSubusersCopy></entitlements>

因此节点被正确复制并添加到子节点的末尾,但是在XML中它没有缩进到它的兄弟级别,并且父级的结束标记在同一行上,甚至虽然我使用了pretty_print选项。虽然生成的XML在技术上是正确的,但它看起来不是很好&#34;根据我们现有的标准。

知道为什么会这样吗?

...谢谢

1 个答案:

答案 0 :(得分:1)

当您的树在节点上没有尾随空格时,

pretty_print=True才有用。因此,您不仅要考虑如何发射它们,还要考虑如何首先解析它们。

使用remove_blank_text=True解析器选项:

parser = etree.XMLParser(remove_blank_text=True)