xml架构根据父属性选择子元素

时间:2013-02-23 20:51:25

标签: xml xsd

我有一个带有属性(类别)的父元素(产品),它可以采用2个值中的任何一个(易腐和非易失)。如果该项目是易腐烂的,我想让孩子元素“食物”,如果它不易腐烂,我想拥有子元素“库存”。从中看,我认为这可以在XSD 1.1中完成,但不能在XSD 1.0中完成。但是,我没有找到如何做到这一点。

以下是我的代码,缩写为显示重要部分:

<?xml version="1.0" encoding="ISO-8859-1" ?>
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="products">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="product" minOccurs="1" maxOccurs="unbounded">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="name" type="xs:string"/>
             <xs:choice>
               <xs:element name="food">
                 <xs:complexType>
                   /*DEFINED FOOD HERE*?
                 </xs:complexType>
               </xs:element>
               <xs:element name="stock">
                 <xs:complexType>
                   /*DEFINED STOCK HERE*/
                 </xs:complexType>
               </xs:element>
             </xs:choice>
           </xs:sequence>
           <xs:attribute name="id" type="xs:ID"/>
           <xs:attribute name="category">
             <xs:simpleType>
               <xs:restriction base="xs:string">
                 <xs:enumeration value="perishable"/>
                 <xs:enumeration value="nonPerishable"/>
               </xs:restriction>
             </xs:simpleType>
           </xs:attribute>
         </xs:complexType>
       </xs:element>
      </xs:sequence>
     </xs:complexType>
   </xs:element>
 </xs:schema>

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

如果你正在寻找类似的东西:

 <perishable>
     <food>cheese</food>
    </perishable>


<xs:element name="perishable">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="food" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>