XML Schema模式,根本不允许任何数据

时间:2011-09-13 10:08:26

标签: xsd

我从外部公司接收这两种形式的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,也不愿意为我更改任何内容。

1 个答案:

答案 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中尝试过,但即使链接帖子中的评论另有说明,它似乎也能正常工作。