给定这个xml架构(片段):
<xs:element name="GetIEnumerableResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetIEnumerableResult" nillable="true" xmlns:q4="http://schemas.microsoft.com/2003/10/Serialization/Arrays" type="q4:ArrayOfstring" />
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
在这个xml片段中:
<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>string1</string>
<string>string2</string>
<string>string3</string>
</ArrayOfstring>
Run Code Online (Sandbox Code Playgroud)
<string> </ string>元素可以按任何顺序出现吗?因此,这两个XML片段在语义上是等价的:
<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>string1</string>
<string>string2</string>
<string>string3</string>
</ArrayOfstring>
<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>string3</string>
<string>string2</string>
<string>string1</string>
</ArrayOfstring>
Run Code Online (Sandbox Code Playgroud)
或者模式中的sequence元素是否意味着<string> </ string>元素必须以相同的顺序出现才能在语义上等效?
架构中是否存在要求解析器/反序列化器按照它们在xml文本中存在的顺序来保留元素吗?如果我理解正确,通常(即没有架构)没有要求这样做(即使大多数解析器通常这样做).
Sequence元素意味着各个元素(不是数组中的元素)应该保留顺序.
例如
<xs:element name="GetIEnumerableResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetIEnumerableResult" nillable="true" xmlns:q4="http://schemas.microsoft.com/2003/10/Serialization/Arrays" type="q4:ArrayOfstring" />
<xs:element name="Dummy" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
在此示例中,Dummy出现在序列中的GetIEnumerableResult之后,并且为了验证它应始终以此复杂类型的顺序出现.
"ArrayOfString"复杂类型中"重复"项的顺序在模式中是不可执行的,并且因为数组不暗示或强制执行任何显式顺序,所以CLR中的语义也不能保证.
保证订单的一种方法是通过序列化索引对集合强加订单.
| 归档时间: |
|
| 查看次数: |
4908 次 |
| 最近记录: |