XSD验证空xs:date元素是否正常

时间:2011-09-09 11:23:23

标签: xml xsd

我在XSD中有这个:

<xs:element name="End_Date" type="xs:date" minOccurs="0"/>

如果有日期或者有空节点我想要验证通过

<End_Date>2011-05-31T00:00:00.000</End_Date> 应该没问题 <End_Date></End_Date>

如何修改XSD才能实现这一目标?

我尝试了不同的东西:

nillable="true"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"

                    <xs:element name="End_Date">
                    <xs:simpleType>
                        <xs:union memberTypes="xs:date">
                        <xs:simpleType>
                        <xs:restriction base="xs:string">
                        <xs:enumeration value=""/>
                        </xs:restriction>
                        </xs:simpleType>
                        </xs:union>
                    </xs:simpleType>
                </xs:element>

他们都没有工作。

错误:

  

检测到错误:'xxxxxxxxxx:End_Date'元素无效 - The   值''根据其数据类型无效   'http://www.w3.org/2001/XMLSchema:date' - 字符串''无效   XsdDateTime值。

4 个答案:

答案 0 :(得分:6)

也许您对xs:date和xs:dateTime之间的区别感到困惑。您在架构中使用了xs:date,但您的示例是xs:dateTime。

有三种方法可以实现您的目标:

(a)定义一个类型,它是(xs:dateTime和(xs的限制:仅允许“”的字符串)的并集)

(b)定义一个xs列表的类型:dateTime with minLength = 0,maxLength = 1

(c)将元素定义为可归零。在这种情况下,实例将不得不说xsi:nil =“true”,在我看来这使得设施很无用。

如果你尝试其中一种并且它不起作用,请告诉我们你做了什么以及它究竟是如何失败的。

答案 1 :(得分:1)

Set Type="xs:date", derivedBy="list" and minOccurs="0"

which looks like this in your XML Schem Document 

<xs:element name="EffectiveDt" nillable="true" minOccurs="0">
  <xs:simpleType>
   <xs:list itemType="xs:date"/>
  </xs:simpleType>
</xs:element>

This will surely help you, I tried in my Code Works perfect.

Validate Your XML against XSD here

I am using this online XML validation against XSD tool.

答案 2 :(得分:0)

xsi:nil = true只要将架构元素定义为nillable就绝对有效。您使用的验证器是什么?

架构:

<xs:schema xmlns="http://myNS" targetNamespace="http://myNS" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="End_Date" nillable="true" type="xs:dateTime" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

实例:

<ns0:Root xmlns:ns0="myNS">
  <End_Date xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</ns0:Root>

有效。

答案 3 :(得分:0)

这对我有用:

[在xsd:]

<xs:simpleType name="DateOrEmptyDate">
    <xs:union memberTypes="xs:date">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:enumeration value=""/>
            </xs:restriction>
        </xs:simpleType>
    </xs:union>
</xs:simpleType>    

[Valid xml:]

<EndDate/>
<EndDate>2017-12-31</EndDate>

[无效的xml:]

<EndDate>2017-31-31</EndDate>