none
Ler o xml por completo. RRS feed

  • Pergunta

  • Sei que foi criado a pouco um com tópico relacionado, entretanto estou com uma certa dificuldade em ler o xml por completo. Até consigo ler uma determinada tag, mas se eu quiser ler todas do xml não consigo, me retorna null. Segue o código.

    DECLARE @docHandle int
    DECLARE @xmlDocument XML
    SET @xmlDocument =
      '<IdItensValores>
        <Item>
          <Moeda>
          <Id>786F98B5-23EE-4792-B8BA-156F304D08F8</Id>
          </Moeda>
          <Moeda>
          <Id>56BF42B5-23EE-4792-B8BA-156F304D08F8</Id>
          </Moeda>
          <DtInicioDepre>
          <dt>27/04/2012</dt>
          </DtInicioDepre>
        <Moeda_Aqui>
          <cotacao>1.00</cotacao>
        </Moeda_Aqui>
        <Custo>
          <valorCusto>1000.00</valorCusto>
        </Custo>
        <Deprec>
          <valorDeprec>10.00</valorDeprec>
        </Deprec>
        <Ult_dep>
          <dtUlt_Dep>27/04/2012</dtUlt_Dep>
        </Ult_dep>
        <Tot_dep>
          <tot_dep>25</tot_dep>
        </Tot_dep>
        <Criadopo>
          <criadoPor>Diego</criadoPor>
        </Criadopo>
        </Item>
       
         <Item>
          <Moeda>
          <Id>786F98B5-23EE-4792-B8BA-156F304D08F8</Id>
          </Moeda>
          <Moeda>
          <Id>56BF42B5-23EE-4792-B8BA-156F304D08F8</Id>
          </Moeda>
          <DtInicioDepre>
          <dt>27/04/2012</dt>
          </DtInicioDepre>
        <Moeda_Aqui>
          <cotacao>1.00</cotacao>
        </Moeda_Aqui>
        <Custo>
          <valorCusto>1000.00</valorCusto>
        </Custo>
        <Deprec>
          <valorDeprec>10.00</valorDeprec>
        </Deprec>
        <Ult_dep>
          <dtUlt_Dep>27/04/2012</dtUlt_Dep>
        </Ult_dep>
        <Tot_dep>
          <tot_dep>25</tot_dep>
        </Tot_dep>
        <Criadopo>
          <criadoPor>Diego</criadoPor>
        </Criadopo>
        </Item>

          <Item>
          <Moeda>
          <Id>786F98B5-23EE-4792-B8BA-156F304D08F8</Id>
          </Moeda>
          <Moeda>
          <Id>56BF42B5-23EE-4792-B8BA-156F304D08F8</Id>
          </Moeda>
          <DtInicioDepre>
          <dt>27/04/2012</dt>
          </DtInicioDepre>
        <Moeda_Aqui>
          <cotacao>1.00</cotacao>
        </Moeda_Aqui>
        <Custo>
          <valorCusto>1000.00</valorCusto>
        </Custo>
        <Deprec>
          <valorDeprec>10.00</valorDeprec>
        </Deprec>
        <Ult_dep>
          <dtUlt_Dep>27/04/2012</dtUlt_Dep>
        </Ult_dep>
        <Tot_dep>
          <tot_dep>25</tot_dep>
        </Tot_dep>
        <Criadopo>
          <criadoPor>Diego</criadoPor>
        </Criadopo>
        </Item>
       
      </IdItensValores>'

    -- Dessa forma retorna os ids.

    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument

    SELECT *
    FROM OPENXML (@docHandle, '/IdItensValores/Item/Moeda',2)
               WITH       (IdMoeda_setape uniqueidentifier         'Id') 

         

    -- Dessa forma tentei retornar todas as informações, mas nada me é retornado.

    SELECT *
    FROM OPENXML (@docHandle, '/IdItensValores/Item/Moeda/DtInicioDepre/Moeda_Aqui/Custo/Deprec/Ult_dep/Tot_dep/Criadopo',2)
             WITH (IdMoeda_setape uniqueidentifier  '../../../../../../../@Id',
                   DtInicioDepre  date              '../../../../../../@dt',
                   Moeda_Aqui     decimal(18,5)     '../../../../../@cotacao',
                   Custo          decimal(18,5)     '../../../../@valorCusto',
                   Deprec         decimal(18,5)     '../../../@valorDeprec',
                   Ult_dep        date              '../../@dtUlt_Dep',
                   Tot_dep        tinyint           '../@tot_dep',
                   Criadopo       varchar(50)       '@criadoPor')
               

     Alguém pode me dar uma luz ? =/    





    • Editado Evertoum sexta-feira, 27 de abril de 2012 19:59
    sexta-feira, 27 de abril de 2012 18:24

Respostas

  • Boa tarde Evertoum,

    Não conheço muito das funcionalidades de XML no Sql Server, mas testei seu exemplo e cheguei em um resultado próximo, veja se é realmente isto que você precisa e se o exemplo te ajuda a ter uma idéia.

    Só não postei a parte de declaração do seu XML ok..

    -- Prepara 
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument;
     
    -- Busca resultado
    SELECT *
    FROM OPENXML (@docHandle, '/IdItensValores/Item',2)
    		      WITH (Id 			 UNIQUEIDENTIFIER './Moeda/Id'          ,
    		            dt 			 DATE             './DtInicioDepre/dt'  ,
    			    cotacao		 decimal(15,2)    './Moeda_Aqui/cotacao',					
    			    valorCusto	         decimal(15,2)	  './Custo/valorCusto'  ,
    			    valorDeprec	         decimal(15,2)	  './Deprec/valorDeprec',
    			    dtUlt_Dep	         DATE		  './Ult_dep'	        ,
    			    tot_dep		 INT		  './Tot_dep'           ,
    			    criadoPor	         VARCHAR(15)	  './Criadopo')
    
    -- Remove Xml
    EXEC sp_xml_removedocument @docHandle


    Adriano Nascimento


    sexta-feira, 27 de abril de 2012 20:29
  • DECLARE @docHandle int
    DECLARE @xmlDocument XML
    SET @xmlDocument =
    '<ItensValores>
      <Item>
        <Moeda id="a62e8756-cd98-4501-8829-4d3c2c438ed2" />
        <DtInicioDepre dt="27/04/2012" />
        <Moeda_Aqui cotacao="1.00" />
        <Custo valorCusto="1000.00" />
        <Deprec valorDeprec="10.00" />
        <Ult_dep dtUlt_Dep="27/04/2012" />
        <Tot_dep tot_dep="25" />
        <Criadopor criadoPor="Diego" />
      </Item>
      </ItensValores>'
      
      
    -- Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
    SELECT *
    FROM OPENXML (@docHandle, '/ItensValores/Item', 2)
        WITH     ( IdMoeda_setape uniqueidentifier     'Moeda/@id',
                   DtInicioDepre  date                 'DtInicioDepre/@dt',
                   Moeda_Aqui decimal (18,5)           'Moeda_Aqui/@cotacao',
                   Custo decimal (18,5)                'Custo/@valorCusto',
                   Deprec decimal (18,5)               'Deprec/@valorDeprec',
                   Ult_dep date                        'Ult_dep/@dtUlt_Dep',
                   Tot_dep tinyint                     'Tot_dep/@tot_dep',
                   Criadopor varchar(50)               'Criadopor/@criadoPor'
                  )

    • Marcado como Resposta Evertoum sexta-feira, 27 de abril de 2012 20:59
    • Editado Evertoum segunda-feira, 30 de abril de 2012 12:23
    sexta-feira, 27 de abril de 2012 20:59

Todas as Respostas

  • Boa tarde Evertoum,

    Não conheço muito das funcionalidades de XML no Sql Server, mas testei seu exemplo e cheguei em um resultado próximo, veja se é realmente isto que você precisa e se o exemplo te ajuda a ter uma idéia.

    Só não postei a parte de declaração do seu XML ok..

    -- Prepara 
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument;
     
    -- Busca resultado
    SELECT *
    FROM OPENXML (@docHandle, '/IdItensValores/Item',2)
    		      WITH (Id 			 UNIQUEIDENTIFIER './Moeda/Id'          ,
    		            dt 			 DATE             './DtInicioDepre/dt'  ,
    			    cotacao		 decimal(15,2)    './Moeda_Aqui/cotacao',					
    			    valorCusto	         decimal(15,2)	  './Custo/valorCusto'  ,
    			    valorDeprec	         decimal(15,2)	  './Deprec/valorDeprec',
    			    dtUlt_Dep	         DATE		  './Ult_dep'	        ,
    			    tot_dep		 INT		  './Tot_dep'           ,
    			    criadoPor	         VARCHAR(15)	  './Criadopo')
    
    -- Remove Xml
    EXEC sp_xml_removedocument @docHandle


    Adriano Nascimento


    sexta-feira, 27 de abril de 2012 20:29
  • DECLARE @docHandle int
    DECLARE @xmlDocument XML
    SET @xmlDocument =
    '<ItensValores>
      <Item>
        <Moeda id="a62e8756-cd98-4501-8829-4d3c2c438ed2" />
        <DtInicioDepre dt="27/04/2012" />
        <Moeda_Aqui cotacao="1.00" />
        <Custo valorCusto="1000.00" />
        <Deprec valorDeprec="10.00" />
        <Ult_dep dtUlt_Dep="27/04/2012" />
        <Tot_dep tot_dep="25" />
        <Criadopor criadoPor="Diego" />
      </Item>
      </ItensValores>'
      
      
    -- Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
    SELECT *
    FROM OPENXML (@docHandle, '/ItensValores/Item', 2)
        WITH     ( IdMoeda_setape uniqueidentifier     'Moeda/@id',
                   DtInicioDepre  date                 'DtInicioDepre/@dt',
                   Moeda_Aqui decimal (18,5)           'Moeda_Aqui/@cotacao',
                   Custo decimal (18,5)                'Custo/@valorCusto',
                   Deprec decimal (18,5)               'Deprec/@valorDeprec',
                   Ult_dep date                        'Ult_dep/@dtUlt_Dep',
                   Tot_dep tinyint                     'Tot_dep/@tot_dep',
                   Criadopor varchar(50)               'Criadopor/@criadoPor'
                  )

    • Marcado como Resposta Evertoum sexta-feira, 27 de abril de 2012 20:59
    • Editado Evertoum segunda-feira, 30 de abril de 2012 12:23
    sexta-feira, 27 de abril de 2012 20:59