Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardo.frias

SP pra leitura de XML

Recommended Posts

Boa noite pessoal!

 

Estou precisando criar uma SP pra ler um XML. Achei um exemplo:

 

ALTER PROCEDURE [dbo].[LER_XML]

@VALORES AS XML

AS

 

DECLARE @NOME VARCHAR(MAX),

@TELEFONE VARCHAR(MAX)

 

/* CAPTURA DADOS XML */

SELECT @NOME = ParamValues.VALOR.value('.','VARCHAR(MAX)')

FROM @VALORES.nodes('/xml') as ParamValues(VALOR)

 

SELECT @TELEFONE = ParamValues.VALOR.value('.','VARCHAR(MAX)')

FROM @VALORES.nodes('/xml') as ParamValues(VALOR)

 

 

/* RETORNA UMA TABELA COM OS VALORES */

SELECT @NOME AS 'NOME',

@TELEFONE AS 'TELEFONE'

 

Porém não entendi muito bem. Alguém saberia como usá-la para ler o XML abaixo?

 

<?xml version="1.0" encoding="UTF-8" ?>

- <mensagem>

<de>alguem</de>

<para>outra pessoa</para>

<assunto>digite o assunto</assunto>

<texto>abcdefghijk</texto>

</mensagem>

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

é só alterar a propriedade NODES da procedure

 

de

FROM @VALORES.nodes('/xml') as ParamValues(VALOR)

FROM @VALORES.nodes('/xml') as ParamValues(VALOR)

 

 

para

FROM @VALORES.nodes('/mensagem/de') as ParamValues(VALOR)

FROM @VALORES.nodes('/mensagem/para') as ParamValues(VALOR)

 

 

Exemplo:

declare @VALORES AS XML

set @VALORES = '<?xml version="1.0" encoding="UTF-8" ?> 
- <mensagem>
<de>alguem</de> 
<para>outra pessoa</para> 
<assunto>digite o assunto</assunto> 
<texto>abcdefghijk</texto> 
</mensagem>

'


DECLARE @DE VARCHAR(MAX),
@PARA VARCHAR(MAX)

/* CAPTURA DADOS XML */
SELECT @DE = ParamValues.VALOR.value('.','VARCHAR(MAX)')
FROM @VALORES.nodes('/mensagem/de') as ParamValues(VALOR)

SELECT @PARA = ParamValues.VALOR.value('.','VARCHAR(MAX)')
FROM @VALORES.nodes('/mensagem/para') as ParamValues(VALOR)


/* RETORNA UMA TABELA COM OS VALORES */
SELECT @DE AS 'DE',
@PARA AS 'PARA' 

retorna:

DE                             PARA
------------------------------ ------------------------------
alguem                         outra pessoa

(1 row(s) affected)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera desculpe ressuscitar este tópico mas eu estou com um problema deste. Eu consegui fazer com que ele leia o XML normalmente, sem problemas mas a questão é, quando o meu XML tem mais de uma opção de cadastro dentro dela. Se eu for pegar o mesmo exemplo acima eu teria o seguinte XML

<?xml version="1.0" encoding="UTF-8" ?> 
<mensagens>
   <mensagem>
     <de>fulano</de> 
     <para>outra pessoa</para> 
     <assunto>digite o assunto</assunto> 
     <texto>meu texto vem aqui</texto> 
   </mensagem>
   <mensagem>
     <de>beltrano</de> 
     <para>cicrano</para> 
     <assunto>meu assunto</assunto> 
     <texto>conteudo do texto</texto> 
   </mensagem>
</mensagens>

 

Como eu faço para que ele faça a inserção de todos os registros, ou seja, ele faça o loop para me mostrar depois. Do jeito q esta ele pega somente o ultimo registro.

Aguardo retorno e a compreensão de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prf. Baco,

 

Aqui tem um exemplo de leitura/escrita em uma tabela:

http://msdn.microsoft.com/pt-br/library/ms191268(v=sql.105).aspx

 

Este exemplo é mais fácil de executar.

 

Dúvidas, pode postar.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.