我在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值。
答案 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>