2010-02-14 68 views
6

我有一個xml文件,它有一些日期值和其他數據類型。如何驗證xsd中的空字符串值標記

<Purchasedate Name="purcaseDate" value=""/> 

我正在使用xsd文件驗證這些xml文件。 在xsd shcema中,我寫了一個dd/mm/yyyy格式的正則表達式模式。

如果value屬性有值,這工作正常。 我的模式正在針對值屬性進行驗證。

該字段(purchasedate)不是強制性的。 如果value =「」,這意味着我的模式也針對空字符串進行驗證,這不是強制性的。

我需要驗證可選字段 ,我也使用<xs:attribute name="PurchaseDate" use="optional">

當值標記不爲空時,我需要驗證此字段。

回答

9

這太容易..

您只需要將中的空字符串規格寫入您的pattern

這是做到這一點的方式.. <xs:pattern value="|(Regular_pattern_goes_here)"/>

供您參考我寫代碼的樣本塊..只是通過他們去..

示例XML:

<?xml version="1.0" encoding="utf-8"?> 
<xmln xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com XMLFile1.xsd" xmlns="http://www.xsdef.com/xml/123"> 
    <Purchasedate Name="purcaseDate" value=""/> 
</xmln> 

樣品XSD:(包括自定義類型DEF)

<xs:schema xmlns:xsLocal="http://www.xsdef.com/xml/123" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xsdef.com/xml/123" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="xmln"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Purchasedate"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attribute name="Name" type="xs:string" use="required" /> 
       <xs:attribute name="value" type="xsLocal:CUSTOM_DATE" use="required" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="CUSTOM_DATE"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="|((01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)/(01|02|03|04|05|06|07|08|09|10|11|12)/[1-2][0-9][0-9][0-9])"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 
0

'?'正則表達式中的字符表示之前的字符必須出現0或1次。

因此,爲了解決你的問題,你需要用括號中的正則表達式,並把一個問號結尾:

<xs:simpleType name="PurchaseDateType"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="(Regular_pattern_goes_here)?"/> 
    </xs:restriction> 
    </xs:simpleType> 

使用此類型在你的領域,你應該罰款

0

如果您控制XML的語法,您應該考慮如下定義元素。由於XML-Schema已經提供了日期類型,所以除非有很好的理由,否則應該使用它。我這樣說是因爲它會使其他人更容易使用xml,並且以後可以使用更好的代碼框架。我沒有包含「name」屬性,因爲它對於元素名稱似乎是多餘的。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

<xs:element name="Purchasedate" nillable="true" type="xs:date"/> 
<xs:element name="Purchasedate2"> 
    <xs:complexType> 
     <xs:attribute name="value" type="xs:date"/> 
    </xs:complexType> 
</xs:element> 
<xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="Purchasedate"/> 
      <xs:element minOccurs="0" ref="Purchasedate2"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element>