我创建了一个 XSD 模式来验证通过序列化 C# 类生成的 XML。
在我的第一个实现中,我使用了序列,但这会导致 XML 中元素的顺序出现许多问题(如果元素以错误的顺序出现,则会导致验证错误)。所以我认为将每个 xs:sequence 更改为 xs:all 会很容易,但这根本不能解决问题,因为我想引用分组元素......
为了说明这个问题,我刚刚创建了一个简单的例子;请参阅下面的 XML 模式定义。请考虑这个模式只是为了描述我的问题,所以我不需要任何关于重新考虑 XML 结构的提示。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PostalAddresses">
<xs:all>
<xs:element minOccurs="1" name="PostalAddres">
<xs:complexType>
<xs:all>
<xs:element name="Street" type="xs:string" />
<xs:element name="StreetNumber" type="xs:string" />
<xs:element name="ZipCode" type="xs:unsignedInt" />
<xs:element name="City" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:group name="AddressFields">
<xs:all>
<xs:element name="FirstName" type="xs:string" />
<xs:element name="LastName" type="xs:string" />
<xs:element name="BirthDate" type="xs:date" />
</xs:all>
</xs:group>
<xs:element name="Addresses">
<xs:complexType>
<xs:sequence>
<xs:group ref="AddressFields" />
<xs:element name="PostalAddresses" type="PostalAddresses"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
问题出现在Addresses
我无法将序列更改为所有元素的元素中;我收到以下验证错误消息:“all”的组引用不是根粒子,或者它被用作扩展。