- Como Criar Um Site, Blog – WebMaster.pt - https://www.webmaster.pt -

MSSQL – Gerando XML

Tweet [3]

MSSQL Server Se você vem acompanhando nossas matérias até hoje, certamente verá que temos falado sempre de segurança. Correto?

Hoje vamos mudar um pouco o foco de nossa matéria para a “praticidade”.

Não sei se você também pensa assim, mas… você já acessou um site de notícias carregado de informações e lento?

A única vontade que sinto ao acessar um site assim, é a de fechar o navegador, e você?

Por esse e outros motivos, vamos falar hoje sobre como gerar XML através do SQL Server!

Para facilitar seu aprendizado e/ou testes, vamos colocar no ficheiro “arquivo.zip” as informações que você precisa. Ok?

Para iniciarmos nossas atividades, precisaremos criar uma tabela contendo os campos a seguir:

- Nome, Sobrenome, Login, Email, Sexo, Data de Cadastro, Tipo, CPF, CNPJ, RazaoSocial, RG, DataNascimento, Logradouro, Numero, Complemento, Referencia, Bairro, Cidade, Estado, Pais, Telefone1, Telefone2, Celular, Fax.

OBS.: Em nossa simulação, não utilizaremos todos os campos. Caso você queira selecionar os principais, não tem problemas.

Bem… antes de colocarmos a mão na massa, digamos que você tenha 3 tabelas com os seguintes nomes: Conta, Usuario e Endereço.

Terá também um sistema interno que receberá todos os dias os novos usuários cadastrados em seu site, porém, na hora de apresentá-los, precisará retornar todos os dias os já cadastrados e os antigos juntos (todos em formato XML).

Não estamos aqui falando de 6 ou 10 usuários e sim de 200.000 cadastros.

Por esse motivo, precisamos pensar sobre o desempenho deste Servidor!

Não sei se você já trabalhou com XML, mas ele deverá seguir o seguinte formato:


<Usuario>
<Nome>Lorem Ipsum</Nome>
<Sobrenome>Dolor</Sobrenome>
<Login>Lorem</Login>
<Email>teste@teste.com</Email>
</Usuario>

Para retorná-los, você poderá fazer através de uma Procedure (que retorna todos os registros para o meu objeto), entre diversas opções (cada qual especificada dentro de sua linguagem de programação preferencial).

OBS.: Trabalhando com a Procedure, sua aplicação poderá ficar até 60% mais rápida, o que dá uma maior estabilidade ao Servidor e eficiência ao script que está sendo trabalhado.

Para exemplificar vamos dar um Select nos campos Nome, Sobrenome e E-mail (conforme o exemplo abaixo):


------EFETUANDO UM SELECT ------
CREATE PROCEDURE GerarXMLUsuarios AS BEGIN

SELECT [UsuNome], [UsuSobrenome], [UsuEmail] FROM [tbUsuarios] END
------

Feito isso, utilizaremos a cláusula FOR XML.

O FOR XML tem por finalidade organizar e retorna as informações em formato XML.

Se você nunca utilizou este recurso, o FOR XML, veja que ele pode ser utilizado das seguintes maneiras:

Modo Auto

Retorna os resultados da consulta como elementos XML simples e alinhado, ou seja, cada tabela indicada depois da cláusula FROM, é um elemento do XML , as colunas indicadas no SELECT são atributos. Utilizamos o AS para nomear os elementos:

Exemplo:


SELECT [UsuNome] AS Nome, [UsuSobrenome] AS Sobrenome, [UsuEmail] AS Email

FROM [tbUsuarios] AS UsuariosGerais FOR XML AUTO

OBS.: Utilizando tal recurso, você terá um resultado como este:


<UsuariosGerais Nome="Dolor" Sobrenome="Teste" Email="loremipsum@teste.com.br" />
<UsuariosGerais Nome="Lorem Ipsum" Sobrenome="Teste" Email="lorem@teste.com.br" />
<UsuariosGerais Nome="Ipsum" Sobrenome="Teste" Email="dolor@teste.com.br" />
<UsuariosGerais Nome="Lorem" Sobrenome="Teste" Email="lorem@teste.com.br" />

OBS.:Se alguma coluna do Select for de uma tabela já identificada, ela é colocada como atributo (conforme visto acima), se for de uma tabela diferente será adicionada como elemento dentro do elemento pai, que é a 1º tabela especificada:


SELECT UsuariosGerais.[UsuNome] AS Nome,
UsuariosGeraisIntro.[UsuSobrenome] AS Sobrenome,
UsuariosGerais.[UsuEmail] AS Email FROM [tbUsuarios] AS UsuariosGerais
INNER JOIN [tbUsuarios] AS UsuariosGeraisIntro ON
UsuariosGerais.UsuCodigo = UsuariosGeraisIntro.UsuCodigo FOR XML AUTO

Para este tipo de select, receberemos algo assim:


<UsuariosGerais Nome="Lorem" Email="lorem@teste.com.br" />
<UsuariosGeraisIntro Sobrenome="Teste" /></UsuariosGerais>

<UsuariosGerais Nome="Lorem" Email="loremipsum@teste.com.br">
<UsuariosGeraisIntro Sobrenome="Ipsum" /></UsuariosGerais>

<UsuariosGerais Nome="Dolor" Email="dolor@teste.com.br">
<UsuariosGeraisIntro Sobrenome=" Teste " /></UsuariosGerais>

<UsuariosGerais Nome="LoremDolor" Email="loremipsumdolor@teste.com.br">
<UsuariosGeraisIntro Sobrenome=" Teste " /></UsuariosGerais>

OBS.: Veja que como estou pegando o Sobrenome de uma “tabela diferente”, ele criou uma nova Tag dentro da principal e aplicou o atributo Sobrenome a ela.

Modo RAW

No modo RAW cada resultado da instrução SELECT vem em linha de acordo com o nome fornecido ao RAW.

Veja o exemplo abaixo:


SELECT [UsuNome] AS Nome, [UsuSobrenome] AS Sobrenome,
[UsuEmail] AS Email FROM [tbUsuarios] AS UsuariosGerais FOR XML RAW
SELECT [UsuNome] AS Nome, [UsuSobrenome] AS Sobrenome, [UsuEmail] AS Email
FROM [tbUsuarios] AS UsuariosGerais FOR XML RAW('Teste')

Para este select, receberemos algo assim:


<row Nome="Lorem" Sobrenome="Teste" Email="lorem@teste.com.br" />
<row Nome="Ipsum" Sobrenome="Teste" Email="ipsum@teste.com.br" />
<row Nome="Dolor" Sobrenome="Teste" Email="dolor@teste.com.br" />
<row Nome="Lorem Ipsum" Sobrenome="Teste" Email="loremipsum@teste.com.br" />

<Teste Nome="Lorem" Sobrenome="Teste" Email="lorem@teste.com.br" />
< Teste Nome="Ipsum" Sobrenome="Teste" Email="ipsum@teste.com.br" />
< Teste Nome="Dolor" Sobrenome="Teste" Email="dolor@teste.com.br" />
< Teste Nome="Lorem Ipsum" Sobrenome="Teste" Email="loremipsum@teste.com.br" />

OBS.: Diferente do AUTO, podemos nomear nossas elementos de acordo com o que colocamos no RAW e tabelas diferentes não são criadas como novos elementos filhos.

Modo PATH

O modo PATH tem uma maneira simples de misturar nós de elementos e atributos, e para propriedades mais complexas o PATH pode ser utilizado para trazer resultados com mais facilidade. Os nomes ou alias de colunas são tratados como expressões XPath.

Veja o exemplo abaixo:


SELECT [UsuNome] AS '@Nome', [UsuSobrenome] AS Sobrenome,
[UsuEmail] AS Email FROM [TIKCUsuarios] AS Usuarios FOR XML PATH

Para este Select, teremos um resultado como o exemplo a seguir:


<row Nome="Lorem">
<Sobrenome>Teste</Sobrenome>
<Email>lorem@teste.com.br</Email>
</row>

<row Nome="Ipsum">
<Sobrenome>Dolor</Sobrenome>
<Email>ipsum@teste.com.br</Email>
</row>

<row Nome="Dolor">
<Sobrenome>Teste</Sobrenome>
<Email>dolor@teste.com.br</Email>
</row>

<row Nome="loremipsum">
<Sobrenome>Teste</Sobrenome>
<Email>loremipsum@teste.com.br</Email>
</row>

OBS.: Veja que onde colocamos o @ temos um Atributo, os que estão sem o @ são Elementos.

Temos uma outra alternativa, veja:


SELECT [UsuCodigo] AS '@ID', [UsuNome] AS 'Nome/Nome' ,
[UsuSobrenome] AS 'Nome/Sobrenome', [UsuEmail] AS 'Email'
FROM [TIKCUsuarios] AS Usuarios FOR XML PATH('Usuarios')

Para este Select, temos o seguinte resultado:


<Usuarios ID="121">
<Nome>
<Nome>Lorem</Nome>
<Sobrenome>Teste</Sobrenome>
</Nome>
<Email>lorem@teste.com.br</Email>
</Usuarios>

<Usuarios ID="122">
<Nome>
<Nome>Ipsum</Nome>
<Sobrenome>Teste</Sobrenome>
</Nome>
<Email>ipsum@teste.com.br</Email>
</Usuarios>

<Usuarios ID="123">
<Nome>
<Nome>Dolor</Nome>
<Sobrenome>Teste</Sobrenome>
</Nome>

<Email>dolor@teste.com.br</Email>
</Usuarios>

<Usuarios ID="124">
<Nome>
<Nome>Lorem Ipsum</Nome>
<Sobrenome>Teste</Sobrenome>
</Nome>
<Email>loremipsum@teste.com.br</Email>
</Usuarios>

Obs.: Veja que neste exemplo estamos utilizando registros pai e filho.
Quando colocamos “/” entre os nomes dos elementos, o elemento anterior a “/” é considerado como pai e o que vem a seguir é considerado como elemento filho.

É importante notar que o @ só pode ser usado se for o 1º elemento, ou se o elemento anterior for @ também. No caso se colocássemos o @ no Email dará um erro.

Bem… essas são algumas opções que você pode começar a usar no seu dia a dia.

Temos ainda opções mais avançadas como o Explicit, Type, entre várias outras opções, mas fogem um pouco deste artigo, já que é voltado a quem está começando com o XML junto ao SQL Server.

Bem… após selecionar o conteúdo corretamente, você terá de trabalhar esse resultado!

Te incentivamos a conhecer mais sobre o XML em matérias específicas.

Caso você tenha alguma dúvida, me coloco a disposição para lhe ajudar.

DOWNLOAD: Descarregue o código utilizado neste tutorial: MSSQL – Gerando XML Através Do MsSQL Server [4], em formato .zip.

Tweet [3]
Be Sociable, Share!
  • [5]
  • [6]
  • [7]
  • [8]
  • [9]