none
Help in importing XML file RRS feed

  • Domanda

  • good morning, 

    i've a problem when i try to import an XML file to SQL.

    In my particular case i've an xml file structured like this:

    <?xml version="1.0" encoding="UTF-8"?>
    <Flussi xmlns="http://indennitario.acquirenteunico.it/Semplificato/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Flusso xsi:type="FlussoSI1.1150Type" COD_FLUSSO="1150" COD_SERVIZIO="SI1">
    <IdentificativiRichiesta>
    <CodPratGestore>688628</CodPratGestore>
    </IdentificativiRichiesta>
    </Flusso>
    </Flussi>

     I managed to import that file in that way:

    DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
    SELECT @XML = '<Flussi >

    <Flusso COD_FLUSSO="1150" COD_SERVIZIO="SI1">
    <IdentificativiRichiesta>
    <CodPratGestore>688628</CodPratGestore>
    </IdentificativiRichiesta>
    </Flusso>
    </Flussi>'

    EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

    SELECT
        Cod_flusso = Events.value('@COD_FLUSSO', 'int'),
        Cod_servizio = Events.value('@COD_SERVIZIO', 'varchar(20)'),
        --EventIsFixed = Events.value('(IsFixed)[1]', 'varchar(20)'),
        --EventKind = Events.value('(EventKind)[1]', 'varchar(20)'),
        PIVAUtenteUscente = Events.value('(IdentificativiRichiesta/PIVAUtenteUscente)[1]', 'varchar(20)'),
        CodPratUtente=Events.value('(IdentificativiRichiesta/CodPratUtente)[1]', 'varchar(20)'),
        CodPOD=Events.value('(DatiTecnici/CodPOD)[1]', 'varchar(20)'),
        Cf=Events.value('(AnagraficaClienteFinale/CF)[1]', 'varchar(20)'),
        Cmor=Events.value('(DefinizioneIndennizzo/Cmor)[1]', 'float'),
        Credito=Events.value('(DefinizioneIndennizzo/Credito)[1]', 'float'),
        DataSwitching=Events.value('(DefinizioneIndennizzo/DataSwitching)[1]', 'varchar(20)'),
        DataEmissione=Events.value('(FattureIndennizzo/DataEmissione)[1]', 'varchar(20)'),
        TipoFattura=Events.value('(FattureIndennizzo/TipoFattura)[1]', 'varchar(20)'),
        DataScadenza=Events.value('(FattureIndennizzo/DataScadenza)[1]', 'varchar(20)'),
        IdentificativoFattura=Events.value('(FattureIndennizzo/IdentificativoFattura)[1]', 'varchar(20)'),
        NumeroGiorniErogazione=Events.value('(FattureIndennizzo/NumeroGiorniErogazione)[1]', 'int')
        --ParameterName = Events.value('(Fields/Parameter[@Name="Name"]/@Value)[1]', 'varchar(20)'),
        --ParameterDuration = Events.value('(Fields/Parameter[@Name="Duration"]/@Value)[1]', 'varchar(20)')
    FROM
        @XML.nodes('/Flussi/Flusso') AS XTbl(Events)
    EXEC sp_xml_removedocument @hDoc

    The problem is that when i try to import the initial file with this kind of attributes: xsi:type="FlussoSI1.1150Type" i can't get the data.

    does anyone know how to solve the problem? thank you 

    martedì 25 novembre 2014 08:28

Tutte le risposte

  • la chiave è quella di utilizzare WITH XMLNAMESPACES.

    la seguente query:

    DECLARE @XML AS XML
    SET  @XML = N'
    <Flussi xmlns="http://indennitario.acquirenteunico.it/Semplificato/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<Flusso xsi:type="FlussoSI1.1150Type" COD_FLUSSO="1150" COD_SERVIZIO="SI1">
    		<IdentificativiRichiesta>
    			<CodPratGestore>688628</CodPratGestore>
    		</IdentificativiRichiesta>
    	</Flusso>
    </Flussi>'
    
    ;WITH XMLNAMESPACES ('http://indennitario.acquirenteunico.it/Semplificato/1.0' as f)
    SELECT
    	c.value('@COD_FLUSSO', 'int') AS CodFulusso,
    	c.value('@COD_SERVIZIO', 'varchar(50)') AS CodServizio,
    	c.value('f:IdentificativiRichiesta[1]/f:CodPratGestore[1]', 'int') AS CodPratGestore
    
    FROM
    	@xml.nodes('/f:Flussi/f:Flusso') T(c)
    

    produce il seguente risultato:

    CodFulusso

    CodServizio

    CodPratGestore

    1150

    SI1

    688628



    Jesús López


    EntityLite a lightweight, database first, micro orm

    giovedì 27 novembre 2014 14:54