Domanda

Sto lavorando su come ottenere un file XML per convalidare contro uno schema XSD e sto avendo problemi con le convalide. Ogni volta che convalidare ottengo errori dicendo

"Errore di schemi di validità: Elemento '{http://services.website.com/ProgramResponse}Population': '' non è un valore valido del tipo atomico 'xs:. Double'"

Credo che questo errore si verifica perché ho un carattere null in quel campo, visualizzata in questo modo:

Quindi, per risolvere questo ho provato usando l'nillable = attributo "true" per gli elementi in modo che possano essere nullo, ma ancora presentarsi come vuoto. Questo sembra essere l'unica soluzione, ma non funziona affatto. Ho ancora gli errori.

Attualmente sto usando per i miei XMLMate convalide e ho ricontrollato che agains diversi verificatori anche online. L'errore persiste. Qualsiasi suggerimento sarebbe molto apprezzato.

<?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>

È stato utile?

Soluzione

Un nodo come < HarvPop>< /HarvPop> sta affermando che il valore esiste e che il suo valore è una stringa vuota.

In base alle informazioni in questa pagina w3.org: http: // www. w3.org/TR/xmlschema-0/#Nils

L'attributo nillable viene utilizzato in questo modo:

Definizione: <xsd:element name="shipDate" type="xsd:date" nillable="true"/>

Utilizzo: <shipDate xsi:nil="true"></shipDate>

vale a dire quello che dovete stato specificamente che il valore è nullo.

L'altro modo per farlo è stato minOccurs = 0, per consentire il valore mancare.

Altri suggerimenti

Un modo che ho trovato che risolve anche il problema con il codice di minimo è stato quello di aggiungere il default = "0" attributo al XSD. Questo consente di convalidare come un doppio, senza avere a che fare con nil facendo difetto zero a un numero.

Errore documento XML con deserialising fortemente tipizzato XSD

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top