none
Como ler o XML ? RRS feed

  • Pergunta

  • Eu tenho um XML gigante com a estutura abaixo. Eu inseri numa tabela em um campo do tipo XML. Como faço para ler todos os pedidos ?

    <Total>
      <Clientes>
        <Cliente>
          <Codigo>7645</Codigo>
          <NumeroLote>Embarque_25042012_162629.xml</NumeroLote>
          <DataHoraLote>25/04/2012 16:27:17</DataHoraLote>
          <Remessas>
            <Remessa>
              <NrRemessa />
              <Pedido>1420104</Pedido>

    ...

    Por favor me ajudem. Preciso muito disso. 


    Guilherme Costa
    Email: guilerme18@hotmail.com

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Movido Gustavo Maia Aguiar sexta-feira, 27 de abril de 2012 13:47 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 25 de abril de 2012 22:02

Respostas

  • Guilherme,

    Apenas para complementar, você precisar usar o sp_xml_removedocument . Pois o sql server disponibiliza uma área de 2gb para tratamento de documentos XML e caso você nao execute essa SP a memoria ficará alocada.

    Abraços;

    Se útil, Classifique.


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com

    quinta-feira, 26 de abril de 2012 12:47
  • Solução do meu problema:

    DECLARE @idoc int
    DECLARE @doc varchar(max)
    SET @doc ='<Total>
      <Clientes>
        <Cliente>
          <Codigo>7645</Codigo>
          <NumeroLote>Embarque_25042012_162629.xml</NumeroLote>
          <DataHoraLote>25/04/2012 16:27:17</DataHoraLote>
          <Remessas>
            <Remessa>
              <Pedido>1420104</Pedido>
            </Remessa>
            <Remessa>
              <Pedido>1419905</Pedido>
            </Remessa>
          </Remessas>
          <Rodape>
            <QtdRemessasLote>136</QtdRemessasLote>
          </Rodape>
        </Cliente>
      </Clientes>
    </Total>'
    -- Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    -- Execute a SELECT stmt using OPENXML rowset provider.
    SELECT *
    FROM OPENXML (@idoc, '/Total/Clientes/Cliente/Remessas/Remessa',2)
          WITH (Pedido varchar(100)         'Pedido')


    Guilherme Costa
    Email: guilerme18@hotmail.com

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 25 de abril de 2012 22:44

Todas as Respostas

  • Solução do meu problema:

    DECLARE @idoc int
    DECLARE @doc varchar(max)
    SET @doc ='<Total>
      <Clientes>
        <Cliente>
          <Codigo>7645</Codigo>
          <NumeroLote>Embarque_25042012_162629.xml</NumeroLote>
          <DataHoraLote>25/04/2012 16:27:17</DataHoraLote>
          <Remessas>
            <Remessa>
              <Pedido>1420104</Pedido>
            </Remessa>
            <Remessa>
              <Pedido>1419905</Pedido>
            </Remessa>
          </Remessas>
          <Rodape>
            <QtdRemessasLote>136</QtdRemessasLote>
          </Rodape>
        </Cliente>
      </Clientes>
    </Total>'
    -- Create an internal representation of the XML document.
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    -- Execute a SELECT stmt using OPENXML rowset provider.
    SELECT *
    FROM OPENXML (@idoc, '/Total/Clientes/Cliente/Remessas/Remessa',2)
          WITH (Pedido varchar(100)         'Pedido')


    Guilherme Costa
    Email: guilerme18@hotmail.com

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 25 de abril de 2012 22:44
  • Guilherme,

    Apenas para complementar, você precisar usar o sp_xml_removedocument . Pois o sql server disponibiliza uma área de 2gb para tratamento de documentos XML e caso você nao execute essa SP a memoria ficará alocada.

    Abraços;

    Se útil, Classifique.


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com

    quinta-feira, 26 de abril de 2012 12:47