我从外部公司接收这两种形式的xml数据
<currencydate>20110910</currencydate>
<currencydate/>
我想验证这个日期确实具有YYYYMMDD这样的格式
<xs:element name="currencydate" type="dateType"/>
<xs:simpleType name="dateType">
<xs:restriction base="xs:string">
<xs:pattern value="[0-2][0-9]{3}[0-1][0-9][0-3][0-9]"/>
</xs:restriction>
</xs:simpleType>
这很好用。但验证会破坏空元素
所以我添加了像这样的minOccurs
<xs:element name="currencydate" type="dateType" minOccurs="0"/>
没有成功所以我添加了nillable
<xs:element name="currencydate" nillable="true" type="dateType" minOccurs="0"/>
没有成功,我猜元素就在那里,所以它会检查模式。所以我改变了模式
<xs:pattern value="[0-2][0-9]{3}[0-1][0-9][0-3][0-9]|"/>
我只添加了指示值可以为空的管道。但仍然没有成功。
所以我的问题是:我如何检查数据模式,但也允许值
<currencydate/>
请注意我从外部公司收到这些数据,该公司不提供xsd,也不愿意为我更改任何内容。
答案 0 :(得分:1)
你有没有试过
<xs:pattern value="|([0-2][0-9]{3}[0-1][0-9][0-3][0-9])" />
如how to validate empty string value tag in xsd中建议的那样?
我只在VS 2010 Express中尝试过,但即使链接帖子中的评论另有说明,它似乎也能正常工作。