我使用XSD来验证传入的XML元素。 XSD文件
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.rg/2001/XMLSchema"
xmlns:tns="http://xxxy/ervices/V0"
targetNamespace="http://xxxy/ervices/V" elementFormDefault="qualified"
attributeFormDefault="unqualified" >
<xs:complexType name="FailType">
<xs:sequence>
<xs:element name="ConDt" type="xs:date" minOccurs="0" maxOccurs="1" nillable="true"/>
<xs:element name="PreEn" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
我的XML文件
<Pat xmlns="http://xxxy/ervices/V">
<ConDt></ConDt>
</Pat>
我得到的元素无效 - 根据数据类型“http://org/2001/XMLSchema:date”,值''无效 - 字符串''不是有效的日期值。
答案 0 :(得分:0)
指定nillable =“true”允许您的实例包含
<ConDt xsi:nil="true"></ConDt>
但它不允许你写
<ConDt></ConDt>
(请不要问我他们在想什么......)
如果你想允许
<ConDt></ConDt>
然后有两种可能的方法
将其定义为允许xs:date或a的联合类型 零长度字符串,或
(我的首选方法)将其定义为列表类型:xs:date值列表,其中maxLength =“1”。
答案 1 :(得分:0)
非常感谢迈克尔。我非常感谢你的帮助。
下面的代码将允许我们声明可选的日期字段。
<xs:element name="ConDt" maxOccurs="unbounded" minOccurs="0">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0" />
<xs:maxLength value="0" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:date" />
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>