Почему этот XSD-файл вызывает у меня эту ошибку? - PullRequest
0 голосов
/ 05 февраля 2020

Добрый день, сообщество StackOverflow. В моем файле XSD возникла следующая ошибка:

Ошибка - строка 13, 21: org. xml .sax.SAXParseException; номер строки: 13; номер столбца: 21; s4s-elt-must-match.1: содержимое 'dadesdelafactura' должно совпадать (аннотация ?, (simpleType | complexType) ?, (уникальный | ключ | keyref) *)). Проблема была обнаружена, начиная с: complexType.

Я пытался перейти с complexType на simpleType, но все еще не работал.

Вот мой XML код:

<?xml version="1.0" encoding="UTF-8"?>
<factura xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="validacio.xsd">
    <dadesdelafactura estat="pendent">
        <logo>http://prntscr.com/qcgl3c</logo>
        <nfactura>PML1434901N106</nfactura>
        <referencia>121901203779/03</referencia>
        <dataemissio>07/10/2019</dataemissio>
        <periodefacturacio>
            <de>2019-08-04</de>
            <fins>2019-10-02</fins>
        </periodefacturacio>
        <datacarreg>14 de octubre de 2019</datacarreg>
        <dadesemissor>
            <empresa>Endesa Energía. S.A. Unipersonal</empresa>
            <cif>28196547A</cif>
            <direccio>
                <carrer>Transformador</carrer>
                <numero>nº 60</numero>
                <pis>ff</pis>
                <porta>ff</porta>
                <cp>ff</cp>
                <ciutat>ff</ciutat>
            </direccio>
            <correu>info@endesa.com</correu>
            <web>endesa.com</web>
            <codipostal>28042</codipostal>
            <ciutat>MADRID</ciutat>
            <telefon tipus="fixe">9165489658</telefon>
        </dadesemissor>
        <dadesreceptor>
            <nom>MATTHEW</nom>
            <cognom>JAMES BELLANY</cognom>
            <nif>40568745J</nif>
            <direccio>Drones, 5-B</direccio>
            <correu>hanysteria@muse.com</correu>
            <codipostal>17001</codipostal>
            <ciutat>GIRONA</ciutat>
            <telefon tipus="mobil">689215497</telefon>
        </dadesreceptor>    
    </dadesdelafactura>
    <resumidadesdepagament>
        <taula>
            <potencia>47,52</potencia>
            <energia>67,77</energia>
            <descomptes>-8,07</descomptes>
            <altres>1,58</altres>
            <impostos>29,48</impostos>
            <total>138,28</total>
        </taula>
        <formulari>
            <metodepagament>
                <targeta>1939394995494</targeta>
            </metodepagament>
            <datacarregform>14 d'octubre de 2019</datacarregform>
            <iban>ES91 2100 0418 4502 0005 1332</iban>
            <codmandat>EO9421002100573420257340</codmandat>
            <versio>0004</versio>
        </formulari>
    </resumidadesdepagament>
    <infoconsumelectric>
        <taula>
            <fila>
                <dada>470kWH</dada>
                <dada>AGO</dada>
                <dada>2018</dada>
            </fila>
            <fila>
                <dada>460kWh</dada>
                <dada>OCT</dada>
                <dada>2018</dada>
            </fila>
            <fila>
                <dada>510kWh</dada>
                <dada>DIC</dada>
                <dada>2018</dada>
            </fila>
            <fila>
                <dada>784kWh</dada>
                <dada>FEB</dada>
                <dada>2019</dada>
            </fila>
            <fila>
                <dada>530kWh</dada>
                <dada>ABR</dada>
                <dada>2019</dada>
            </fila>
            <fila>
                <dada>960kWh</dada>
                <dada>AGO</dada>
                <dada>2019</dada>
            </fila>
            <fila>
                <dada>410kWh</dada>
                <dada>OCT</dada>
                <dada>2019</dada>
            </fila>
        </taula>
        <grafic>
            <x>1120</x>
            <mes>AGO</mes>
            <any>18</any>
            <x>960</x>
            <mes>OCT</mes>
            <any>18</any>
            <x>800</x>
            <mes>DIC</mes>
            <any>18</any>
            <x>640</x>
            <mes>FEB</mes>
            <any>19</any>
            <x>480</x>
            <mes>ABR</mes>
            <any>19</any>
            <x>320</x>
            <mes>AGO</mes>
            <any>19</any>
            <x>160</x>
            <mes>OCT</mes>
            <any>19</any>
        </grafic>
        <addicionalgrafic>
            <costfactura>2.34€ / dia</costfactura>
            <costultims14mesos>2.65€ / dia</costultims14mesos>
            <consumdarrerany>3.715 kWh</consumdarrerany>
        </addicionalgrafic>
    </infoconsumelectric>
</factura>

Вот мой XSD-код:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="dadesdelafactura">
    <xs:complexType>
        <xs:attribute name="estat">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern  value="pendent|pagada"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="logo" type="xs:string" />
            <xs:element name="nfactura" type="xs:integer"/>
            <xs:element name="referencia" type="xs:string"/>
            <xs:element name="dataemissio" type="xs:date"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="periodefacturacio">
        <xs:sequence>
            <xs:element name="de" type="xs:date"></xs:element>
            <xs:element name="fins" type="xs:date"></xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="datacarreg" type="xs:string"></xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="dadesemissor">
        <xs:sequence>
            <xs:element name="empresa" type="xs:string"></xs:element>
            <xs:element name="cif" type="xs:string">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[a-zA-Z0-9]{9}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="direccio" type="xs:string"></xs:element>
            <xs:element name="correu" type="xs:string"></xs:element>
            <xs:element name="web" type="xs:string"></xs:element>
            <xs:element name="codipostal" type="xs:string"></xs:element>
            <xs:element name="ciutat" type="xs:string"></xs:element>
            <xs:element name="telefon">
                <xs:attribute name="tipus">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:pattern  value="fixe|mobil"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="dadesreceptor">
        <xs:sequence>
            <xs:element name="nom" type="xs:string"></xs:element>
            <xs:element name="cognom" minOcurrs="0" maxOcurrs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLenght value="50"></xs:maxLenght>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="nif" type="xs:string"></xs:element>
            <xs:element name="direccio" type="xs:string"></xs:element>
            <xs:element name="correu" type="xs:string" minOcurrs="0" maxOcurrs="1">
                <xs:simpleType>
                    <xs:restriction>
                        <xs:pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="codipostal" type="xs:integer"></xs:element>
            <xs:element name="ciutat" type="xs:string"></xs:element>
            <xs:element name="telefon" type="xs:integer" minOcurrs="0" maxOcurrs="1">
                <xs:attribute name="tipus">
                    <xs:simpleType>
                        <xs:restriction>
                            <xs:pattern value="fix|mobil"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="resumidadesdepagament">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="taula">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="potencia" type="xs:integer"></xs:element>
                        <xs:element name="energia" type="xs:integer"></xs:element>
                        <xs:element name="descomptes" type="xs:integer"></xs:element>
                        <xs:element name="altres" type="xs:integer"></xs:element>
                        <xs:element name="impostos" type="xs:integer"></xs:element>
                        <xs:element name="total" type="xs:integer"></xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="formulari">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="metodepagament" type="xs:string">
                            <xs:complexType>
                                <xs:choice>
                                    <xs:element name="comptat" type="xs:integer"></xs:element>
                                    <xs:element name="transferencia" type="xs:string">
                                        <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                                <xs:pattern value="/^([A-Z]{2})([0-9]{2})([A-Z0-9]{9,30})$/" />
                                            </xs:restriction>
                                        </xs:simpleType>
                                    </xs:element>
                                    <xs:element name="targeta" type="targeta"></xs:element>
                                </xs:choice>
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="datacarregform" type="xs:date"></xs:element>
                        <xs:element name="iban" type="xs:string"></xs:element>
                        <xs:element name="codmandat" type="xs:string"></xs:element>
                        <xs:element name="versio" type="xs:integer"></xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="infoconsumelectric">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="taula" minOcurrs="0" maxOcurrs="unbounded">
                <xs:complexType minOcurrs="0" maxOcurrs="unbounded">
                    <xs:sequence>
                        <xs:element name="fila">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="dada" type="xs:string"></xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

Надеюсь, эта информация полезна.

1 Ответ

0 голосов
/ 06 февраля 2020

Проблема с вашим XSD - структура запуталась. У вас есть более одного <xs:complexType> в определении элемента "dadesdelafactura".

Вы, вероятно, имели в виду что-то вроде этого:

<xs:element name="dadesdelafactura">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="logo" type="xs:string" />
            <xs:element name="nfactura" type="xs:integer"/>
            <xs:element name="referencia" type="xs:string"/>
            <xs:element name="dataemissio" type="xs:date"/>
        </xs:sequence>

        <xs:attribute name="estat">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern  value="pendent|pagada"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>
...