2012-08-03 42 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>