【问题标题】:Xml validation of empty tag空标签的xml验证
【发布时间】:2011-10-03 15:03:32
【问题描述】:

我有元素日期类型的 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,因为我是从另一个系统接收的。

【问题讨论】:

    标签: java xml validation


    【解决方案1】:

    由于您无法更改 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"/>
    

    【讨论】:

    • 我喜欢你的回答,所以给你一票。我使用了空字符串类型的第一个解决方案。
    猜你喜欢
    • 2010-10-03
    • 2011-06-26
    • 2013-07-21
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多