Атрибут XSD NILLABLE не работает

Я работаю над получением xml-файла для проверки по схеме XSD, и у меня возникли проблемы с проверками. Каждый раз, когда я проверяю, я получаю ошибки, говоря

"ошибка допустимости схем: элемент '{http://services.website.com/ProgramResponse}Population': "не является допустимым значением атомарного типа 'xs: double'."

Я считаю, что эта ошибка происходит потому, что у меня есть нулевой символ в этом поле, отображается вот так:

Итак, чтобы решить эту проблему, я попытался использовать атрибут nillable="true" для элементов, чтобы они могли быть нулевыми, но все равно отображаться как пустые. Это кажется единственным решением, но оно не работает вообще. Я все еще получаю ошибки.

в настоящее время я использую 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>

ie вы должны конкретно указать, что значение равно null.

другой способ сделать это-указать minoccurs = 0, чтобы позвольте отсутствовать значению.


один из способов, которым я обнаружил, что также устраняет проблему с минимальным кодом, - добавить атрибут default= " 0 " в XSD. Это позволяет вам проверять как double без необходимости иметь дело с nil, делая nil по умолчанию числом.

ошибка deserialising XML-документ со строго типизированными xsd-схемы