我的xml文件包含元素日期类型:
...
<startDate />
...
在xsd文件中描述了这种类型:
<xs:element name="startDate " type="xs:date" nillable="true" />
当我使用SchemaValidator验证xml时,我有一个异常
org.xml.sax.SAXParseException:cvc-datatype-valid.1.2.1:''являетсянедопустимымзначениемдля'date'。
当标签startDate不为空时,一切正常。但是当它是空的时候就会发生。我只能更改xsd-schema文件,而不能更改xml,因为我从另一个系统接收它。
答案 0 :(得分:4)
由于您无法更改XML文档,因此可以尝试使用空字符串构建xs:date的联合类型:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="empty-string">
<xs:restriction base="xs:string">
<xs:maxLength value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="startDate">
<xs:simpleType>
<xs:union memberTypes="xs:date empty-string"/>
</xs:simpleType>
</xs:element>
</xs:schema>
针对哪个
<startDate/>
应该验证。
注意:如果您可以更改XML文档,则可能会根据原始模式成功验证(因为nillable属性):
<startDate
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:nil="true"/>