首页 > 解决方案 > XSD Schema 元素可以是两种类型之一

问题描述

我一直在环顾四周,真的没有简单的方法让一个元素成为两种可能的类型吗?我尝试了以下解决方法。

<xs:element name="food">
  <xs:complexType>
     <xs:choice>
       <xs:element name="meat" type="meatFoods"/>
       <xs:element name="veggies" type="veggieFoods"/>
     </xs:choice>
  </xs:complexType>
</xs:element>
food cannot have character [children], because the type's content type is element-only.

和:

<xs:choice>
  <xs:sequence>
    <xs:element name="food" type="meatFoods"/>
  </xs:sequnce>
  <xs:sequence>
    <xs:element name="food" type="veggieFoods"/>
  </xs:sequence>
</xs:choice>

给出关于相同名称不同类型的错误

和:

<xs:complexType name="MeatOrVeggies">
  <xs:choice>
    <xs:element name="meat" type="meatFoods"/>
    <xs:element name="veggies" type="veggieFoods"/>
  </xs:choice>
</xs:complexType>
<xs:element name="food" type="MeatOrVeggies"/>
food cannot have character [children], because the type's content type is element-only.

这些都会引发某种错误。最后一个给出 food 是一个元素,并且 no child allowed 错误,第二个给出“多个名为“food”的元素,不同类型出现在模型组中。”

此 XSD 是 java 有效负载对象的有效负载,它具有: FoodInterface food. Meat 和 Veggies 是该接口的枚举,如下所示:

public enum Meat implements FoodInterface{
   Chicken,
   Beef,
   Pork
}

模式中的肉类/蔬菜枚举:

<xs:simpleType name="meatFoods">
  <xs:restriction base="xs:string">
    <xs:enumeration value="chicken"/>
    <xs:enumeration value="beef"/>
    <xs:enumeration value="pork"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="veggieFoods">
  <xs:restriction base="xs:string">
    <xs:enumeration value="spinach"/>
    <xs:enumeration value="broccoli"/>
    <xs:enumeration value="tomato"/>
  </xs:restriction>
</xs:simpleType>
Thanks in advance.

标签: javaxmlxsdjaxbschema

解决方案


“......联合元素将简单类型定义为来自指定简单数据类型的值的集合(联合)......” 在这里查看:https ://www.w3schools.com/xml/el_union.asp


推荐阅读