如何为单个XSD元素强制执行两种类型之一?

时间:2011-07-14 01:42:39

标签: xml xsd choice

我有一个名为“PRICE”的xml元素。

我想在这个字段中允许使用枚举值{MAX,MIN,UNAV}中的数字或其中一个。这可以用XSD吗?

此代码段演示了我想要的内容,但它无效:

       <xs:choice>
           <xs:element name="PRICE">
               <xs:simpleType>
                   <xs:restriction base="xs:string">
                       <xs:enumeration value="MAX"/>
                       <xs:enumeration value="MIN"/>
                       <xs:enumeration value="UNAV"/>
                   </xs:restriction>
               </xs:simpleType>
           </xs:element>
           <xs:element name="PRICE">
               <xs:simpleType>
                   <xs:restriction base="xs:float"/>
               </xs:simpleType>
           </xs:element>
       </xs:choice>

2 个答案:

答案 0 :(得分:5)

<xs:element name="Price">
    <xs:simpleType>
        <xs:union>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="MAX"/>
                    <xs:enumeration value="MIN"/>
                    <xs:enumeration value="UNAV"/>
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
                <xs:restriction base="xs:float"/>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
</xs:element>

答案 1 :(得分:1)

你可以试试这样的事情

     <xs:element name="PRICE">
           <xs:simpleType>
              <xs:restriction base="xs:string">
                 <xs:pattern value="MAX|MIN|UNAV|\d+"/>
              </xs:restriction>
           </xs:simpleType>
       </xs:element>

编辑:

\d+适用于整数,但对于浮点数,您可以使用[-+]?[0-9]*\.?[0-9]*