【发布时间】:2010-08-23 21:39:20
【问题描述】:
我正在使用 jQuery 将任意 XML 字符串(较大文档的片段)加载到浏览器 DOM 中并对其进行操作,然后使用 XMLSerializer 将它们加载回字符串并将它们发送回服务器,在那里进行处理(通过 python 和 lxml) 并重新集成到一个完整的 XML 文档中。
XML 在 git 存储库中开始和结束。我发现 XMLSerializer 处理的元素的属性顺序颠倒了,导致我的存储库中出现虚假更改,如下所示:
- <literal><token kind="w" id="en-us-esv-xeaugcbzgo">sent</token><token kind="s" id="en-us-esv-xeaugcbzgw"> </token></literal>
+ <literal><token id="en-us-esv-xeaugcbzgo" kind="w">sent</token><token id="en-us-esv-xeaugcbzgw" kind="s"> </token></literal>
这不是我使用的任何工具的错误。当然,xml 元素上的属性顺序并不重要。 但是, 因为 git 是一个面向行的 SCM,这些虚假和微不足道的变化会分散我想要跟踪的实际实质性变化。
问题:有没有办法防止序列化程序重新排序我的属性?或者,是否存在任何工具来指定/限制属性的顺序?
为清楚起见在上面进行了编辑:我知道,根据 XML 规范,“开始标记或空元素标记中的属性规范的顺序并不重要”:http://www.w3.org/TR/REC-xml/#sec-starttags .可以这么说,属性的顺序对我来说很重要。 :)
【问题讨论】:
-
看起来,属性最终是按字母顺序排列的。您不能将其设置为约定吗?或许对操纵 XML 的 Python 代码的一个小改动会使它们立即以“正确”的顺序出现?
-
这可能是我最终要做的。很不方便的是,我的 XML 操作工具(lxml,libxml2 的 python 包装器)没有将属性排序视为重要的(并且正确地如此!)。因此,我对上述问题进行了编辑。
标签: javascript xml xml-serialization lxml