2012-08-03 44 views
3
<xs:element name="featureTests"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="test" minOccurs="1" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="status"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="not run"/> 
            <xs:enumeration value="passed"/> 
            <xs:enumeration value="failed"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="summary" type="xs:string"/> 
         <xs:sequence> 
          <xs:element name="step" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
         </xs:sequence> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

我使用上述XSD来验证我的XML文件的正常工作以外的所有的status标签枚举限制。XSD枚举限制无法正常工作

如果我这样做:

<status> 
    not run <!--OR passed OR failed--> 
</status> 

验证失败时说,它必须包含[无法运行,通过,失败]

你能告诉我在哪里,我错了?

感谢

回答

1

问题就来了,因为周围的枚举值,即具有这种“不跑”,而不是这个“无法运行”的空间/在XML文档标签的约。

解决这个,我改变了XSD文件,使用令牌类型而不是字符串类型,除去开头和结尾的空白字符:

<xs:restriction base="xs:token"> 
    <xs:enumeration value="not run"/> 
    <xs:enumeration value="passed"/> 
    <xs:enumeration value="failed"/> 
</xs:restriction>