简体   繁体   中英

Convert xsd schema to xml

I've three XSD files and one big excel file 48k rows. How can i generate a xml file based on the XSD files.

EDIT: When i use excel to do the job it gives me an error "List of lists"

Main xsd file

<xs:include schemaLocation="Rosto.xsd"/>

<!-- Declaracao -->
<xs:element name="Modelo2">
    <xs:annotation>
        <xs:documentation>
            Modelo 2 IMI - Declaração de Contratos de Fornecimento
        </xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Rosto" type="RostoType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Secundary xsd

<xs:simpleType name="NIFType">
    <xs:restriction base="xs:positiveInteger">
        <xs:totalDigits value="9"/>
        <xs:minInclusive value="100000000"/>
        <xs:maxInclusive value="999999999"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="TrimestreType">
    <xs:annotation>
        <xs:documentation>
            03T - 1º Trimestre
            06T - 2º Trimestre
            09T - 3º Trimestre
            12T - 4º Trimestre
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
        <xs:length value="3"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="CodTipoEntidadeType">
    <xs:annotation>
        <xs:documentation>
            201 - Entidade Fornecedora de Água
            202 - Entidade Fornecedora de Eletricidade
            203 - Entidade Fornecedora de Gás
            204 - Entidade Fornecedora de Serviço Fixo de Telecomunicações
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:positiveInteger">
        <xs:totalDigits value="3"/>
        <xs:minInclusive value="201"/>
        <xs:maxInclusive value="204"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="CodTipoContratoType">
    <xs:annotation>
        <xs:documentation>
            501 - Contrato de inicio do fornecimento
            502 - Contrato de alteração do fornecimento
            503 - Cessacao do fornecimento
            504 - Contrato de ligação a rede de fornecimento
            505 - Outro
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:positiveInteger">
        <xs:totalDigits value="3"/>
        <xs:minInclusive value="501"/>
        <xs:maxInclusive value="505"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="CodAmbitoContratoType">
    <xs:annotation>
        <xs:documentation>
            801 - Água - Contratos de fornecimento de água
            802 - Água - Contratos de ligação à rede de fornecimento de água
            803 - Água - Outro
            804 - Eletricidade - Contratos de fornecimento de eletricidade
            805 - Eletricidade - Contratos de ligação à rede elétrica
            806 - Eletricidade - Outro
            807 - Gás - Contratos de fornecimento de gás
            808 - Gás - Contratos de ligação à rede de fornecimento de gás
            809 - Gás - Outro
            810 - Telefones - Contratos de fornecimento de serviço fixo
            811 - Telefones - Contratos de ligação à rede de serviço fixo
            812 - Telefones - Outro
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:positiveInteger">
        <xs:totalDigits value="3"/>
        <xs:minInclusive value="801"/>
        <xs:maxInclusive value="812"/>
    </xs:restriction>
</xs:simpleType>

<xs:complexType name="IdClienteType">
    <xs:sequence>
        <xs:element name="idPaisResidencia" minOccurs="0">
            <xs:simpleType>
                <xs:annotation>
                    <xs:documentation>
                        Identificação do país de residência (ISO 3166)
                    </xs:documentation>
                </xs:annotation>
                <xs:restriction base="xs:string">
                    <xs:length value="2"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="nifCliente" type="NIFType" minOccurs="0">
            <xs:annotation>
                <xs:documentation>
                    NIF ou NIPC do cliente do declarante
                </xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="docIdentificacao" minOccurs="0">
            <xs:simpleType>
                <xs:annotation>
                    <xs:documentation>
                        Documento de identificação do não residente
                    </xs:documentation>
                </xs:annotation>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="100"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="nomeCliente" minOccurs="0">
            <xs:simpleType>
                <xs:annotation>
                    <xs:documentation>
                        Nome do não residente
                    </xs:documentation>
                </xs:annotation>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="170"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

<xs:simpleType name="CodQualidadeClienteType">
    <xs:annotation>
        <xs:documentation>
            1001 - Proprietário, usufrutuário ou superficiário
            1002 - Arrendatário
            1003 - Subarrendatário
            1004 - Outros
        </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:positiveInteger">
        <xs:totalDigits value="4"/>
        <xs:minInclusive value="1001"/>
        <xs:maxInclusive value="1004"/>
    </xs:restriction>
</xs:simpleType>

<xs:complexType name="IdLocalAbastecidoType">
    <xs:sequence>
        <xs:element name="freguesia">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="6"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="tipo">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:length value="1"/>
                    <xs:enumeration value="U"/>
                    <xs:enumeration value="R"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="artigo" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="7"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="fraccao" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="5"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="seccao" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="7"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="arvCol" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="3"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="omisso" type="xs:boolean"/>
        <xs:element name="morada" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="3000"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

Secundary xsd

<xs:include schemaLocation="Global.xsd"/>

<xs:complexType name="RostoType">
    <xs:sequence>
        <xs:element name="nif" type="NIFType">
            <xs:annotation>
                <xs:documentation>[1] - NIF da entidade declarante</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="trimestre" type="TrimestreType">
            <xs:annotation>
                <xs:documentation>[3] - Trimestre</xs:documentation>
            </xs:annotation>
        </xs:element>
        <!-- usar UTC -->
        <xs:element name="ano" type="xs:gYear">
            <xs:annotation>
                <xs:documentation>[4] - Ano</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="entidade" type="EntidadeType" minOccurs="0" maxOccurs="4">
            <xs:annotation>
                <xs:documentation>[2] - Entidade</xs:documentation>
            </xs:annotation>
        </xs:element>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="EntidadeType">
    <xs:sequence>
        <xs:element name="tipoEntidade" type="CodTipoEntidadeType"/>
        <xs:element name="linhas" type="EntidadeLinhaType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="EntidadeLinhaType">
    <xs:sequence>
        <xs:element name="tipoContrato" type="CodTipoContratoType">
            <xs:annotation>
                <xs:documentation>[5] - Tipo de contrato ou ato</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="identificacaoDocumento">
            <xs:annotation>
                <xs:documentation>[6] - Identificação do documento</xs:documentation>
            </xs:annotation>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="40"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <!-- usar UTC -->
        <xs:element name="dataContrato" type="xs:date">
            <xs:annotation>
                <xs:documentation>[7] - Data do contrato ou ato</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="ambitoContrato" type="CodAmbitoContratoType">
            <xs:annotation>
                <xs:documentation>[8] - Ambito do contrato ou ato</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="identificacaoCliente" type="IdClienteType">
            <xs:annotation>
                <xs:documentation>[9] - Identificacao do cliente</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="qualidadeCliente" type="CodQualidadeClienteType">
            <xs:annotation>
                <xs:documentation>[10] - Qualidade do cliente</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="identificacaoLocalAbastecido" type="IdLocalAbastecidoType">
            <xs:annotation>
                <xs:documentation>[11] - Identificacao do local abastecido</xs:documentation>
            </xs:annotation>
        </xs:element>
        <xs:element name="identificacaoProprietario" type="NIFType" minOccurs="0">
            <xs:annotation>
                <xs:documentation>[12] - Identificacao do proprietario do local abastecido</xs:documentation>
            </xs:annotation>
        </xs:element>
    </xs:sequence>
</xs:complexType>

With XQuery , you should be able to produce the XML output as needed, that is, with the schema import and everything, and you should also be able to validate it against your schema.

You can export your Excel file as CSV. The open-source Zorba engine has modules for converting CSV to XML or JSON and supports XML Schema validation. Other XQuery implementations ( Saxon , ...) may also support importing data from CSV files.

It's possible to create an application to read information from Excel files with Apache POI libraries. And then map it to XML objects generated from XSD files using JAXB.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM