Xsd XML模式结合了选择和全部

Xsd XML模式结合了选择和全部,xsd,Xsd,我想进行如下验证: <A> <B> or <C> <D> </A> 或 在中,第一个元素应该是B和C中的一个。第二个元素是D。同时,第一个元素B或C和第二个元素不按顺序排列。它可能会变得越来越糟糕。有人知道怎么做吗?要匹配您的示例,请尝试: <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/20

我想进行如下验证:

<A>
   <B> or <C>
   <D>
</A>

在中,第一个元素应该是B和C中的一个。第二个元素是D。同时,第一个元素B或C和第二个元素不按顺序排列。它可能会变得越来越糟糕。有人知道怎么做吗?

要匹配您的示例,请尝试:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="A">
     <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element name="B" type="xs:string"/>
          <xs:element name="C" type="xs:string"/>
        </xs:choice>
        <xs:element name="D" type="xs:string" minOccurs="0" maxOccurs="1" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我得到了最佳实践。应如下所示:

<xs:element name="A">
   <xs:complexType>
      <xs:all>
        <xs:element ref="Choice" minOccurs="1" maxOccurs="1"/>
        <xs:element ref="D" minOccurs="0" maxOccurs="1"/>
      </xs:all>
   </xs:complexType>
 </xs:element>

 <xs:element name="D" type="xs:string"/>

 <xs:element name="Choice" abstract="true"/> 

 <xs:element name="B" substitutionGroup="Choice"> 
 </xs:element>

 <xs:element name="C" substitutionGroup="Choice"> 
 </xs:element>


您能为您描述的第二部分添加有效的xml吗,因为我不遵循它->“同时,第一个元素B或C和第二个元素不按顺序排列。它可以变成和。”以下工作:,,,在您的回答中,它是按顺序排列的。我不希望这两个元素按顺序排列。有效案例如下所示:@程晨编辑了答案,涵盖了你们提到的所有有效案例。我得到了最佳实践,并刚刚发布了它。谢谢你的回答。@MichałSzkudlarek你能帮我投票表决我的问题或回答吗?。。我正在努力获得我的前15名声誉。。太难了!
<xs:element name="A">
   <xs:complexType>
      <xs:all>
        <xs:element ref="Choice" minOccurs="1" maxOccurs="1"/>
        <xs:element ref="D" minOccurs="0" maxOccurs="1"/>
      </xs:all>
   </xs:complexType>
 </xs:element>

 <xs:element name="D" type="xs:string"/>

 <xs:element name="Choice" abstract="true"/> 

 <xs:element name="B" substitutionGroup="Choice"> 
 </xs:element>

 <xs:element name="C" substitutionGroup="Choice"> 
 </xs:element>