#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. Мне нравится ваш ответ, поэтому предлагаю вам один голос. Я использовал первое решение с типом пустой строки.