Xsd атрибут NILLABLE не работает
Я работаю над получением xml-файла для проверки по схеме XSD, и у меня возникли проблемы с проверками. Каждый раз, когда я проверяю, я получаю ошибки, говорящие
"Ошибка валидности схем: элемент '{http://services.website.com/ProgramResponse} Population': "не является допустимым значением атомарного типа 'xs: double'."
Я считаю, что эта ошибка происходит потому, что у меня есть нулевой символ в этом поле, отображаемый следующим образом:
Итак, чтобы решить эту задачу, я попробовал использовать атрибут nillable= "true" для элементов, чтобы они могли быть null, но все равно отображаться как пустые. Это кажется единственным решением, но оно не работает вообще. Я все еще получаю ошибки.
В настоящее время я использую XMLMate для моих валидаций, и я дважды проверил его на нескольких онлайн-верификаторах. Ошибка все еще сохраняется. Любые предложения были бы великолепны.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:element name="Reports" type="tns:ReportsType"/>
<xsd:complexType name="ReportsType">
<xsd:sequence>
<xsd:element name="Report" type="tns:ReportType" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ReportType">
<xsd:sequence>
<xsd:element name="Id" nillable="true"/>
<xsd:element name="Brand" type="xsd:string"/>
<xsd:element name="Address" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="State" type="xsd:string"/>
<xsd:element name="ZipCode" type="xsd:string"/>
<xsd:element name="Entry" type="tns:EntryType" maxOccurs="unbounded" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="EntryType">
<xsd:sequence>
<xsd:element name="RM" nillable="true" type="xsd:double"/>
<xsd:element name="Pop" nillable="true" type="xsd:double"/>
<xsd:element name="Wt" nillable="true" type="xsd:double"/>
<xsd:element name="EntryId" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
2 ответа:
Узел, подобный
< HarvPop>< /HarvPop>
, утверждает, что значение существует и что его значение является пустой строкой.Основываясь на информации об этом w3.org Страница: http://www.w3.org/TR/xmlschema-0/#Nils
Атрибут nillable используется следующим образом:
Определение:
<xsd:element name="shipDate" type="xsd:date" nillable="true"/>
Использование:
<shipDate xsi:nil="true"></shipDate>
Т. е. вы должны конкретно указать, что значение равно null.
Другой способ сделать это-указать minoccurs = 0, чтобы пропустить значение.
Один из способов, который я нашел, также исправляет проблему с минимальным кодом, - это добавить атрибут default="0" в XSD. Это позволяет проверять как двойник без необходимости иметь дело с нулем, делая нулевое значение по умолчанию для числа.
Ошибка десериализации XML-документа со строго типизированным XSD