标签顺序是否与有效XML相关?

时间:2010-11-05 11:45:59

标签: xml validation tags

换句话说,

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <tag1>
  <tag1.1></tag1.1>
 </tag1>
 <tag2 />
<root>

与:

相同
<?xml version="1.0" encoding="UTF-8"?>
    <root>
     <tag2 />
     <tag1>
      <tag1.1></tag1.1>
     </tag1>     
    <root>

5 个答案:

答案 0 :(得分:12)

在显示的详细信息中,您的两个示例在语义上是相同的。

对XML的常见误解是,在格式良好的XML文档中,兄弟元素的顺序非常重要。 XML 1.0 spec指定属性是无序的,但它没有说明元素。因此,XML处理器可以按照自己喜欢的顺序自由报告元素兄弟。

尽管如此,我认为任何常用的XML处理器都不会按照它们在文档中出现的顺序报告元素。

您询问“有效”文档 - 这意味着DTD或架构正在使用中,因此它可能(或可能不)是订单相关的情况。 DTD或模式有一些机制可以指定元素顺序在文档中是相关的。但是,您的示例不显示使用DTD或架构。

答案 1 :(得分:5)

对于XML本身并不重要。这两个文档当然都是格式良好的 XML文档。但是,它们可能不是有效;当使用XML Schema进行验证时,可以指定一个订单,而不按该顺序提供元素将使文档根据模式无效。这可以使用here

所述的xsd:sequence元素来完成

答案 2 :(得分:1)

这取决于您的语言定义的DTD(或架构)。

答案 3 :(得分:1)

这取决于消耗XML的内容。对于XML文档格式正确(取决于XSD),元素的顺序可能并不重要,但某些程序/ API希望按字母顺序读取XML(例如.NET中的DataContractSerializer)。 p>

此外,订单可能在语义上很重要(例如,如果XML表示文档,则订单非常重要)。

答案 4 :(得分:0)

XML维护文档的顺序 - 这些文档被认为是两个不同的文档。

您的申请可能会或可能不会认为要素的顺序很重要。例如,元素的顺序在XHTML中是必不可少的。如果您要对Schema或类似的进行验证,则取决于架构,两个文档是否有效。

请注意,属性的顺序并不重要(仅按元素属性顺序不同的XML文档被视为相同)。