【发布时间】:2011-02-14 01:12:36
【问题描述】:
我使用 ElementTree 在 python 中编写了一个相当简单的过滤器来处理一些 xml 文件的上下文。它或多或少都有效。
但它会重新排序各种标签的属性,我希望它不要这样做。
有谁知道我可以抛出一个开关以使其保持指定的顺序?
上下文
我正在使用并开发一个粒子物理工具,该工具具有基于 xml 文件的复杂但异常受限的配置系统。以这种方式设置的许多东西包括各种静态数据文件的路径。这些路径被硬编码到现有的 xml 中,并且没有根据环境变量设置或更改它们的工具,并且在我们的本地安装中,它们必然位于不同的位置。
这不是一场灾难,因为我们使用的源代码和构建控制组合工具允许我们使用本地副本隐藏某些文件。但是即使数据字段是静态的,xml 也不是,所以我编写了一个脚本来修复路径,但是本地和主版本之间的属性重新排列差异比必要的更难阅读。
这是我第一次尝试使用 ElementTree(也是我的第五个或第六个 python 项目)所以也许我做错了。
为简单起见,代码如下所示:
tree = elementtree.ElementTree.parse(inputfile)
i = tree.getiterator()
for e in i:
e.text = filter(e.text)
tree.write(outputfile)
合理还是愚蠢?
相关链接:
【问题讨论】:
-
没有真正的解决方案吗? python 3.4中的etree不保留属性?还是有一些设置?感谢您的帮助!
-
@Gabriel 看看接受的答案...
-
我想到了一个非猴子补丁解决方案 =)?可悲的是,现在看起来没有比这更好的了……如果 XML 应该保持手动编辑并且便于阅读,这个问题尤其重要,我几乎认为我要使用正则表达式替换来修改 xml,很烂但是,然后保留布局(还有缩进和换行等格式)
-
如果您的目标是合理的差异,请考虑将文件的规范副本保留为 c14n 格式。这样,您可以重新规范化任何修改后的版本并获得仅包含语义相关更改的差异。
-
它没有在任何地方记录,但显然 python 3.8 解决了这个问题。
标签: python xml elementtree