Вопрос

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

«Ошибка достоверности схем: элемент '{http://services.website.com/programresponse)

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

Итак, чтобы решить это, я попытался использовать атрибут 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>

Это было полезно?

Решение

Узел, как < HarvPop>< /HarvPop> утверждает, что значение есть и что его значение является пустой строкой.

На основании информации на этой странице W3.org: http://www.w3.org/tr/xmlschema-0/#nils

Подобный атрибут используется так:

Определение:<xsd:element name="shipDate" type="xsd:date" nillable="true"/>

Применение:<shipDate xsi:nil="true"></shipDate>

т.е. вы должны конкретно указать, что значение является нулевым.

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

Другие советы

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

Ошибка Deserializing XML документ с сильно напечатанным XSD

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top