空标记的Xml验证

时间:2011-10-03 15:03:33

标签: java xml validation

我的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,因为我从另一个系统接收它。

1 个答案:

答案 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"/>