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不遵循此模式,但至少现在我有话要测试的。
如果手头没有XSD(XML模式),那么你可以检查你的XML是否已完全形成了。
你的情况 - 这是。有没有重叠的XML标签,没有被打开的或者那样的话XML标签。
如果供应商需要加强的东西象XML的秩序,他应该提供一个XSD文件 - 否则,他的“要求”不能验证,并检查....
我知道这是旧的,但我只是临到职位。
直到今天,我将最有可能回答这个问题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的时间
(这句话sequence
和all
都是所谓的XML Schema定义一个Compositor。)
厂商会这么做,他们将做什么,但它是XML的一种非标准应用依靠排序。
XML是声明,不是程序。因此,它不应该是“逐步的”。
XML模式可以强制元素顺序。如果没有模式,既不是为了,也不标记也不一般结构不是那种文本(如果它是一个数字或任何东西),规定以任何方式 - 理论上。当然,这是不是这里的情况。
这是完全可能的解析的XML *数据,而无需关心秩序,但它可以更容易(例如,使用SAX时,我想,还是当你是一个懒惰的混蛋写得马虎码)来分析,如果你承担一定的顺序。虽然他们应该包括一些模式,如果他们想要一个特定的顺序,这是完全可能的,他们的解析器就可以了扼流圈反正。是的,他们不应该这样做,但很明显,他们不在乎。
*通过“解析”我的意思不是“采取XML文档,并把它变成例如DOM”,而是“采取例如DOM,并从中提取信息”。
XML模式可以或者可以不执行元件的顺序。这取决于问题的模式。在最一般的意义上,XML元素的顺序并不重要,除非通过适当的模式另有规定。
通过DOM访问XML保留节点的顺序他们是你的XML文档中的方式。看这里:
http://www.w3schools.com/dom/dom_nodes_nodelist.asp
那里你会发现:
节点列表对象表示节点的列表,以相同的顺序如在XML。
如果您的Web服务是依托的顺序是不同的问题 - 它可能会或可能不会,这取决于Web服务实现。
嗯,我想最好的答案是 - 问他们。他们甚至可以解析你的XML为文本文件,所以你可能需要在换行和属性的一些“正确”的顺序。
如果他们会分析这个正确的顺序不会有问题(至少不是有效的请求而言)。在我看来,他们应该建立两个表,并用提供的IDS加入他们的行列。