Pregunta

Estoy trabajando para obtener un archivo XML para validar contra un esquema XSD y tengo problemas con las validaciones. Cada vez que valido obtengo errores diciendo

"Error de validez de esquemas: elemento '{http://services.website.com/programresponse }Population': '' no es un valor válido del tipo atómico 'xs: double'".

Creo que este error sucede porque tengo un personaje nulo en ese campo, que se muestra así:
<arvpop> </arvpop>

Entonces, para resolver esto, intenté usar el atributo nillable = "verdadero" para los elementos para que puedan ser nulos, pero aún así aparecer como vacío. Esta parece ser la única solución, pero no funciona en absoluto. Todavía obtengo los errores.

Actualmente estoy usando XMLMate para mis validaciones y también lo revisé dos verificadores en línea. El error aún persiste. Cualquier sugerencia seria genial.

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

¿Fue útil?

Solución

Un nodo como < HarvPop>< /HarvPop> está afirmando que el valor está ahí y que su valor es una cadena vacía.

Basado en la información sobre esta página W3.org: http://www.w3.org/tr/xmlschema-0/#nils

El atributo Nillable se usa así:

Definición:<xsd:element name="shipDate" type="xsd:date" nillable="true"/>

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

es decir, debe indicar específicamente que el valor es nulo.

La otra forma de hacerlo es indicar minecios = 0, para permitir que falta el valor.

Otros consejos

Una forma en que descubrí que también soluciona el problema con un código mínimo fue agregar el atributo predeterminado = "0" al XSD. Esto le permite validar como doble sin tener que lidiar con NIL haciendo un número predeterminado a un número.

Error de deserialización del documento XML con XSD fuertemente escrito

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top