Проверка пустого тега в формате Xml

#java #xml #validation

#java #xml #проверка

Вопрос:

У меня есть XML-файл с типом даты элемента:

 ...
<startDate />
...
  

в файле xsd этот тип описан:

 <xs:element name="startDate " type="xs:date" nillable="true" />
  

Когда я проверяю xml с помощью SchemaValidator, у меня возникает исключение

org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: » является недопустимым значением для ‘date’.

когда начальная дата тега не пуста, все в порядке. Но когда он пуст, возникает исключение. Я могу изменить только файл xsd-schema, но не xml, потому что я получаю его из другой системы.

Ответ №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"/>
  

Комментарии:

1. Мне нравится ваш ответ, поэтому предлагаю вам один голос. Я использовал первое решение с типом пустой строки.