1

我创建了一个 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”的组引用不是根粒子,或者它被用作扩展。

4

0 回答 0