我有一个模式需要允许两组元素中的一组:
<xs:element name="Parent" maxOccurs="99">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="Address" type="xs:string" />
<xs:element name="City" type="xs:string" />
<xs:element name="State" type="xs:string" />
<xs:element name="Zip" type="xs:string" />
</xs:sequence>
<xs:sequence>
<xs:element name="Address" type="xs:string" />
<xs:element name="State" type="xs:string" />
<xs:element name="Zip" type="xs:string" />
<xs:element name="Country" type="xs:string" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
但验证似乎总是出现在第一个选择中(它会说Missing Element City)。我怎样才能做到这一点?我使用的是.NET XSD 1.0,但我无法更改XML。
答案 0 :(得分:2)
这很有用。如果有人想要提供更好的解决方案或进一步详细说明,我会暂时不接受这篇文章的回复。
<xs:group name="SharedElements">
<xs:sequence>
<xs:element name="Address" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:group name="NationalElements">
<xs:sequence>
<xs:element name="city" type="xs:string" />
<xs:element name="State" type="xs:string" />
<xs:element name="Zip" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:group name="InternationalElements">
<xs:sequence>
<xs:element name="State" type="xs:string" />
<xs:element name="Zip" type="xs:string" />
<xs:element name="Country" type="xs:string" />
</xs:sequence>
</xs:group>
<xs:element name="Parent" maxOccurs="99">
<xs:complexType>
<xs:sequence>
<xs:group ref="SharedElements" />
<xs:choice>
<xs:group ref="NationalElements" />
<xs:group ref="InternationalElements" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>