关于是否元素的顺序XML护理?

问题描述 投票:27回答:7

XML让我困惑的时候,但是我试图让这个想通了。什么是供应商告诉我,没有任何意义,但再次,XML和我合不来:)

我有一些XML,我传送给到是给我随机故障供应商的网络服务:

<root>
    <Request>
        <Driver id="1" VehId="1">...</Driver>
        <Driver id="2" VehId="1">...</Driver>
        <Driver id="3" VehId="2">...</Driver>
        <Vehicle id="1">...</Vehicle>
        <Vehicle id="2">...</Vehicle>
        <Driver id="4" VehId="2">...</Driver>
    </Request>
</root>

没有XSLT或XSD来比较,看看我的XML是有效的。

厂商指出,XML是无效的,因为驱动程序#4是在错误的区域。驾驶中的XPath应根/请求/驾驶员和车辆是根/请求/车辆。

它是常见的XML解析器会迫使元素顺序,特别是如果没有XSD的XML比较?该供应商的支持是缓慢回来陪我,所以我想知道好常见的做法是什么。

跟进

我足够的抱怨我们的客户代表约不能够进行测试(并使其听起来像他们只是想获得支持资金),它原来,开发商有XSD,但支持不。所以,我一直在谈论到错误组*捂脸*

我得到了XSD,它也执行元素特定的顺序。

我们打他们的问候自己的示例XML不遵循此模式,但至少现在我有话要测试的。

xml xsd
7个回答
19
投票

如果手头没有XSD(XML模式),那么你可以检查你的XML是否已完全形成了。

你的情况 - 这是。有没有重叠的XML标签,没有被打开的或者那样的话XML标签。

如果供应商需要加强的东西象XML的秩序,他应该提供一个XSD文件 - 否则,他的“要求”不能验证,并检查....


24
投票

XML schema compositor "sequence" will enforce ordering

我知道这是旧的,但我只是临到职位。

直到今天,我将最有可能回答这个问题Does XML care about the order of elements?No, unless you use a poorly written xml parser.

然而,今天的第三方应用抱怨我创建的XML文件是无效的。他们使用XSD文件验证XML。是的,你可以强制执行XSD文件中的顺序或元素:

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="ComplexType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" default="" name="Value1" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" default="" name="Value2" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

关键字是xs:sequence

序列元素指定的子元素必须出现在序列。每个子元素可能出现0到任意次数。

这是相对于xs:all不关心顺序,但只允许其出现零次或一次的元素。

指定子元素可以以任意顺序出现。每个子元素可出现0或1的时间

(这句话sequenceall都是所谓的XML Schema定义一个Compositor。)


3
投票

厂商会这么做,他们将做什么,但它是XML的一种非标准应用依靠排序。

XML是声明,不是程序。因此,它不应该是“逐步的”。


3
投票

XML模式可以强制元素顺序。如果没有模式,既不是为了,也不标记也不一般结构不是那种文本(如果它是一个数字或任何东西),规定以任何方式 - 理论上。当然,这是不是这里的情况。

这是完全可能的解析的XML *数据,而无需关心秩序,但它可以更容易(例如,使用SAX时,我想,还是当你是一个懒惰的混蛋写得马虎码)来分析,如果你承担一定的顺序。虽然他们应该包括一些模式,如果他们想要一个特定的顺序,这是完全可能的,他们的解析器就可以了扼流圈反正。是的,他们不应该这样做,但很明显,他们不在乎。

*通过“解析”我的意思不是“采取XML文档,并把它变成例如DOM”,而是“采取例如DOM,并从中提取信息”。


2
投票

XML模式可以或者可以不执行元件的顺序。这取决于问题的模式。在最一般的意义上,XML元素的顺序并不重要,除非通过适当的模式另有规定。


2
投票

通过DOM访问XML保留节点的顺序他们是你的XML文档中的方式。看这里:

http://www.w3schools.com/dom/dom_nodes_nodelist.asp

那里你会发现:

节点列表对象表示节点的列表,以相同的顺序如在XML。

如果您的Web服务是依托的顺序是不同的问题 - 它可能会或可能不会,这取决于Web服务实现。


0
投票

嗯,我想最好的答案是 - 问他们。他们甚至可以解析你的XML为文本文件,所以你可能需要在换行和属性的一些“正确”的顺序。

如果他们会分析这个正确的顺序不会有问题(至少不是有效的请求而言)。在我看来,他们应该建立两个表,并用提供的IDS加入他们的行列。

© www.soinside.com 2019 - 2024. All rights reserved.