ASP  - Gerando XML


No artigo   ASP - Gerando XML , XLS e DOC no servidor mostrei uma das forma de gerar XML com ASP. Como o assunto é vasto e as possibilidades são múltiplas este artigo aborda uma outra forma de obter o mesmo resultado.

Na verdade um arquivo XML pode ser criado facilmente por qualquer editor de Textos (que tal o NotePad) e só abrir e digitar o texto respeitando o padrão para arquivos XML.

O problema é quando necessitamos gerar arquivos XML de forma dinâmica, neste caso dependendo da situação você pode adotar a estratégia mais adequada. Se você não precisa armazenar o arquivo gerado em disco pode gerar o arquivo XML em uma página ASP e enviar o arquivo como XML. Abaixo temos um exemplo de código que pode ser usado para criar o arquivo XML: aviso.xml:

<% 
Response.ContentType="text/xml" 
Response.Write("<?xml version="1.0"?>")
Response.Write("<aviso>")
Response.Write("<para>Janice data="01/04/2000"</para>")
Response.Write("<de>Jefferson</de>")
Response.Write("<cabecalho>Lembre-se</cabecalho>")
Response.Write("<corpo>Amanha voce tem prova de matematica</corpo>")
Response.Write("</aviso> ")
%>

O cenário mais comum é você ter que gerar um arquivo XML a partir de informações que estão armazenadas em uma base de dados neste caso temos que usar a tecnologia ADO para acessar a fonte de dados. No exemplo abaixo estou acessando a base de dados Clientes.mdb e gerando um arquivo XML com as informações de nome, endereço e email da tabela Clientes.

<%
Response.ContentType = "text/xml"
set conn=Server.CreateObject("ADODB.Connection")
conn.provider="Microsoft.Jet.OLEDB.4.0;"
conn.open server.mappath("Clientes.mdb")
sql="select nome, endereco,email from Clientes"

set rs = Conn.Execute(sql)
rs.MoveFirst()
 
response.write("<?xml version='1.0' ?>")
response.write("<clientes>")
while (not rs.EOF)
    response.write("<cliente>")
    response.write("<nome>" & rs("nome") & "</nome>")
    response.write("<endereco>" & rs("endereco") & "</endereco>")
    response.write("<email>" & rs("email") & "</email>")
    response.write("</cliente>")
    rs.MoveNext()
wend

rs.close()
conn.close()
response.write("</clientes>")
%>

Até o momento não tivemos a preocupação de gravar o arquivo gerado. Uma das formas de persistir o arquivo XML gerado é usar o objeto Microsoft.XMLDOM. No exemplo abaixo temos o código que realiza esta tarefa:

<%
'Instancia o objeto XMLDOM.
Set xmldoc = Server.CreateObject("MSXML2.DOMDocument.4.0")

'Nome e caminho completo de onde será salvo o arquivo
nome = "d:\teste\macoratti.xml"

'Carrega o arquivo se ele já existir
arquivo = xmldoc.Load(nome)

'Se o arquivo existe então acaba o processo e destrói o objeto
if arquivo = True Then

   Response.write "Arquivo já existente !"
   Set xmldoc = nothing
   Response.end

end if

'O método createElement adiciona os elementos
Set root = xmldoc.createElement("Macoratti.NET")
xmldoc.appendChild (root)

'O método createProcessingInstruction possui 2 argumentos: o TARGET = "xml" e DATA = "version='1.0' encoding='ISO-8859-1'"
Set inst = xmldoc.createProcessingInstruction("xml", "version='1.0'
encoding='ISO-8859-1'")
xmldoc.insertBefore inst, root

Set com = xmldoc.createComment("Documento xml de exemplo")
xmldoc.insertBefore com, root

Set onode = xmldoc.createElement("Opcoes")
onode.Text = "Tudo para Visual Basic, ASP, XML, SQL e muito mais..."

'O método appendChild adiciona um elemento filho ao elemento atual
xmldoc.documentElement.appendChild (onode)
Set inode = xmldoc.createElement("Visual Basic")
onode.appendChild (inode)

Set child = xmldoc.createElement("Opcao")
child.Text = "Tudo para Visual Basic e Visual Basic .NET"
inode.appendChild (child)

xmldoc.documentElement.appendChild (onode)
Set inode = xmldoc.createElement("ASP")
onode.appendChild (inode)

Set child = xmldoc.createElement("Opcao")
child.Text = "Tudo para ASP e ASP.NET"
inode.appendChild (child)

xmldoc.documentElement.appendChild (onode)
Set inode = xmldoc.createElement("Outros")
onode.appendChild (inode)

Set child = xmldoc.createElement("Opcao")
child.Text = "C# , XML, SQL, Crystal Reports e muito mais..."
inode.appendChild (child)

'Salva o arquivo no caminho definido
xmldoc.save (nome)

Response.write "Arquivo gerado e salvo !"

'Destruindo os objetos usados
Set xmldoc = Nothing
Set root = Nothing
Set inst = Nothing
Set com = Nothing
Set onode = Nothing
Set inode = Nothing
Set child = Nothing
Set onode = Nothing
Set inode = Nothing
Set child = Nothing
%>

Executando o arquivo acima teremos o arquivo macoratti.xml gerado conforme figura abaixo:

Simples e objetivo não é mesmo...

Até o próximo artigo ASP ...


José Carlos Macoratti