正如评论者所提到的,属性顺序在XML中没有语义上的意义,也就是说,它不会改变元素的含义:
<tag attr1="val1" attr2="val2"/>
<!-- means the same thing as: -->
<tag attr2="val2" attr1="val1"/>
sql有一个类似的特征,即列顺序不会改变表定义的含义。XML属性和sql列是一个 集合 (不是有 序列的集合 ),因此,关于这些属性之一,可以“正式”说的就是属性或列是否存在于集合中。
就是说,这肯定会影响人类的可读性,因为在这样的结构被编写并以文本形式出现(例如源代码)并且必须进行解释的情况下,这些事物的出现顺序和顺序对我来说很有意义。 。
任何将属性顺序视为重要的XML解析器都将不符合XML标准。这并不意味着它不可能发生,但是根据我的经验,这当然是不寻常的。但是,根据您提到的工具的来源,这可能值得测试。
据我所知,lxml
没有指定顺序属性出现在序列化XML中的机制,如果确实如此,我会感到惊讶。
为了测试行为,我强烈倾向于编写一个基于文本的模板以生成足够的XML来对其进行测试:
id = 1
name = 'Development Signature'
puid = 'dev/1'
version = '1.0'
mimetype = 'text/x-test-signature'
template = ('<FileFormat ID="%d" Name="%s" PUID="%s" Version="%s" '
'MIMEType="%s">')
xml = template % (id, name, puid, version, mimetype)