在XML中,顺序重要吗?

Lan*_*uhn 51 xml

公共父元素在XML中出现的顺序是XML文档捕获的有意义的数据,还是未指定为有意义的顺序?例如,考虑两个XML文档:

<people>
 <person name="sam"/>
 <person name="juni"/>
</people>
Run Code Online (Sandbox Code Playgroud)

<people>
 <person name="juni"/>
 <person name="sam"/>
</people>
Run Code Online (Sandbox Code Playgroud)

这些文件是否被视为代表相同的数据,还是被捕获的顺序不同?

Ada*_*uth 51

元素的顺序在XML中很重要,因此在您的示例中,两个文档是不同的.但是,属性顺序并不重要.

<people>
  <person name="kathy" id="1"/>
</people>
Run Code Online (Sandbox Code Playgroud)

这完全相同:

<people>
  <person id="1" name="kathy"/>
</people>
Run Code Online (Sandbox Code Playgroud)

  • 对,那是正确的.无论它们是什么,元素的顺序总是很重要. (4认同)
  • 见http://www.w3.org/TR/xml-infoset/中的2.1.1和2.2.4,并注意2.2.5下的"无序". (4认同)

l0b*_*0b0 23

它们并不相同 - 序列是否重要取决于程序或处理它的用户.例如,XHTML文档中的元素序列决定了它们在浏览器中的显示方式,搜索引擎使用文档中的位置来判断数据的相对重要性.

  • 绝对是.这是XHTML的存在理由. (11认同)
  • XHTML与XML兼容,但XML不符合XHTML. (2认同)

Jon*_*eet 20

订单可能很重要,但这取决于传输的内容.

例如,在XHTML中,顺序非常重要 - 如果你有一个随机顺序的兄弟段落,那将是非常令人困惑的!

在许多其他情况下,它并不重要.

XML只是表示节点树的一种方式.XML本身表示订单很重要:例如,API必须保留订单 - 但这取决于产生/解释数据的真正关心订单与否.

XML规范实际上必须"在排序方面犯错" - 如果您不关心它,很容易忽略排序,但如果API决定转换,那么重建排序是一件痛苦的事.(您必须将订单放入属性等)


unw*_*ind 5

根据这篇文章,该标准的 1.0 版本甚至不要求解析器按照同级在文档中出现的顺序报告它们。从这个角度来看,他们不会被认为是不同的,因为两个孩子都在那里。也许这已经改变了,所以其他答案适用于较新版本的 XML。


ska*_*man 5

虽然就XML标准而言,XML属性排序并不重要,但XML的文本表示确实将属性放在特定的顺序中.这可能是XML Signature等问题,它为XML文档生成数字签名.不同的属性顺序会生成不同的签名,这显然是错误的.

出于这个(和其他)原因,现在有一个XML规范化的标准,它定义了重新组织XML文档的规则,使得它们保留相同的信息内容,但是以可预测的方式重新排列空白,命名空间声明和属性等内容. .

来自xml.com

Canonical XML要求以升序词典顺序包含名称空间声明和属性.


Luk*_*ett 5

从纯粹的XML有效性角度来看,它取决于描述用于格式化XML的规则的模式(如果有的话).

也就是说,必须保留顺序(参见http://www.w3.org/TR/xml-infoset/中的 2.1.1 ),但它对应用程序的"重要性"取决于作者.

在模式中,使用xs:all合成器可以使顺序变得不重要,但我不确定这是否会影响捕获顺序的保留,即我仍然期望XML处理器维护原始/序列化的顺序.

但是,在1.0中,此合成器会对子元素添加限制,以使它们必须出现0或1次.在XSD 1.1中,删除了此限制,使合同更容易指定订单不重要,实际上xs:all已成为无序版本xs:sequence.

由于过度限制的1.0 xs:all合成器,xs:sequence必须使用有序合成器.因此,订单通常是人为强加的.

验证器库供应商采用1.1的速度很慢.

因此,API在使用新元素进化时需要考虑顺序.我不知道任何可以使用1.1的XML序列化框架,你必须假设你的客户端将使用1.0并将使用1.0规则验证1.1传入消息并阻塞.

卢克


Mar*_*age 1

它们是有区别的。您可以使用各种 XML API 按顺序处理元素或按索引查找元素。当然,在您的特定示例中顺序可能并不重要,但这取决于数据的语义。

  • 是的,我知道许多 API 都保留顺序。但我想知道 XML 规范是否需要这种行为。 (2认同)