有关使用 xml.dom.minidom 这个包修改/添加 xml 文件内容的问题

2021-01-14 15:02:30 +08:00
 IVeverKB

当我已经存在一个 xml 文件,使用这个包去添加新节点后,需要再添加一句这个才能使文件真正修改

with open('myxml.xml', 'w') as f:
    dom.writexml(f, addindent=' ')

问题就出在这里,函数writexmladdindent参数表示每个子结点的缩近字符,我想让它缩进两个空格。但当这么设置后,原文件本来旧的子节点会在缩进两个空格的基础上再缩进两个空格,而新节点只缩进两个空格。其他参数同理。。。

除了这个,还有一些节点也会发生奇怪的变动。

 [原文件] 

<?xml version="1.0" encoding="utf-8" ?>
<root node>
  <old>
    <old>text</old>
  </old>
</root node>



 [添加一个 new 节点后] 

<?xml version="1.0" encoding="utf-8" ?><root node>
    <old>
      <old>text</old>
    <new>text</new></old>
</root node>

大概就是这样,好苦恼啊。各位之前有碰到过这类问题吗求助求助

1019 次点击
所在节点    Python
2 条回复
ysc3839
2021-01-14 15:17:53 +08:00
大概是因为原来的空格会解析成 text node,可以写个脚本 strip 一下。
参考这一段 https://github.com/ysc3839/AudioPlaybackConnector/blob/da39a942f38accae891df930a7b0a4074cdeb7d4/translate/xamlmin.py#L4-L9
IVeverKB
2021-01-14 15:47:37 +08:00
@ysc3839 #1
非常感谢!
就用了这两行代码就解决了
xamlmin(xml)
xml.normalize()

诶说到底还是对 xml 文件本质不了解,大佬找问题的方式太准了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX