Используйте <xsd:choice>
вместо <xsd:sequence>
и отбросьте minOccurs="0"
Пример кода, который требует одно из полей
<xsd:complexType name="Test">
<xsd:choice>
<xsd:element name="fieldA"/>
<xsd:element name="fieldB"/>
</xsd:choice>
</xsd:complexType>
Если вы хотите, чтобыравен <fieldA>
или <fieldB>
или обоим элементам в любом порядке , затем используйте
<xsd:complexType name="Test">
<xsd:choice>
<xsd:sequence>
<xsd:element name="fieldA"/>
<xsd:element name="fieldB" minOccurs="0"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="fieldB"/>
<xsd:element name="fieldA" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
Если вы хотите, чтобы было <fieldA>
или <fieldB>
или обаэлементы и сохраните порядок (<fieldA>
до <fieldB>
), тогда вы можете немного упростить структуру.
<xsd:complexType name="Test">
<xsd:choice>
<xsd:sequence>
<xsd:element name="fieldA"/>
<xsd:element name="fieldB" minOccurs="0"/>
</xsd:sequence>
<xsd:element name="fieldB"/>
</xsd:choice>
</xsd:complexType>