Cadastrar, Listar, Editar e Excluir dados de um XML com ASP

dezembro 18, 2008 by admin
Filed under: ASP, Programação 

Cadastrando

Primeiro temos que ter o XML pronto, como um Banco de Dados com suas “Colunas” já estruturadas. Adicionei três tags a ele e uma principal, as tags são nome, email e telefone, junto com a tag usuario, que fecha o registro e junto com a tag cadastro que chega o “pacote”. Então vamos lá:

Banco.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<cadastro>
<usuario>
<nome>teste nome</nome>
<email>teste email</email>
<telefone>teste telefone</telefone>
</usuario>
</cadastro>

Deixei a estrutura fixa, já com as tags nome, email e telefone, já preenchidas para só seguirem a base, saber do que cada elemento é composto.

XML criado então é só criar uma página chamada Cadastro.asp, dentro dela criar um formulário com os campos de Nome, E-Mail e Telefone e um botão para salvar, tudo em tags HTML mesmo.

Na mesma página fiz uma otimização, coloquei o código de cadastramento em ASP dentro da mesma página e ativei o script através do click do botão “Enviar”, finalizando fica assim:

Cadastro.asp

<%@ Language=”VBScript” %>
<html>
<body>
<a href=”Cadastro.asp”>CADASTRAR</a> – <a href=”Listar.asp”>LISTAR</a>
<br><br>
<form action=”Cadastro.asp” method=”post”>
<b>Nome: </b><input type=”text” name=”Nome”><br>
<b>E-Mail: </b><input type=”text” name=”EMail”><br>
<b>Telefone: </b><input type=”text” name=”Telefone”><br>
<input type=”submit” value=”Cadastrar” name=”btCad”>
</form>
</body>
</html>
<%
‘ Cadastrando dentro do arquivo XML
If Request.Form(”btCad”) = “Cadastrar” Then
Dim Nome, EMail, Telefone, Banco
Nome = Request.Form(”Nome”)
EMail = Request.Form(”EMail”)
Telefone = Request.Form(”Telefone”)
Banco = Server.MapPath(”Banco.xml”)
Set DocMT = Server.CreateObject(”Microsoft.XMLDOM”) ‘ Criando Objeto
DocMT.Load(Banco)
Set RaizXML = DocMT.documentElement
Set CriarReg = DocMT.createElement(”usuario”)
RaizXML.appendChild(CriarReg)
‘ Funcção para criar objetos dentro do XML

Function AlimentarXML(NomeElemento, NomeVariavel)
Set Campo = DocMT.createElement(””&NomeElemento&””)
Campo.Text = NomeVariavel
CriarReg.appendChild(Campo) ‘ Linha de criação de Objetos
End Function

Call AlimentarXML(”nome”, Nome)
Call AlimentarXML(”email”, EMail)
Call AlimentarXML(”telefone”, Telefone)

DocMT.Save(Banco)
Response.Write(”<script>alert(’Cadastrado com Sucesso!’);location=’Cadastro.asp’</script>”)
Set DocMT = Nothing
End If
%>

Para ficar mais fácil, deixei o código todo comentado, mas algumas linhas serão esclarecidas:

Para inserir dados no XML, usei o Microsoft.XMLDOM para conexão. Em cada inserção adiciono uma tag usuario com essa linha abaixo:

Set CriarReg = DocMT.createElement(“usuario”)

Como são três tags para ser alimentadas usei uma função de minha autoria para fazer esse trabalho, a [cor2]AlimentarXML[/cor2] e adiciono com a linha Call AlimentarXML(“nome”, Nome) e salvo tudo através do DocMT.Save(Banco) e pronto, é só testar e ver se o XML está sendo manipulado corretamente:

OBS: Quando testei no meu localhost, o arquivo Cadastro.asp deu erro de acesso. Teste ele em um servidor web e funcionou, caso isso aconteçam com vocês também.

De primeira, vamos organizar o arquivo Visualizar.xsl:

Visualizar.xsl

<?xml version=”1.0″?>
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>
<xsl:template match=”/”>
<center>
<font color=”#000000″ size=”2″ face=”MS Sans Serif”>Visualizando Dados</font>
<table width=”465″ border=”1″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td width=”117″ height=”22″><div align=”center”><strong>Nome</strong></div></td>
<td width=”125″><div align=”center”><strong>E-mail</strong></div></td>
<td width=”107″><div align=”center”><strong>Telefone</strong></div></td>
<td width=”106″><div align=”center”><strong>Ações</strong></div></td>
</tr>
<xsl:for-each select=”cadastro/usuario”>
<tr align=”center”>
<td height=”22″><xsl:value-of select=”nome”/></td>
<td><xsl:value-of select=”email”/></td>
<td><xsl:value-of select=”telefone”/></td>
<td><a><xsl:attribute name=”href”>Editar.asp?nome=<xsl:value-of select=”nome”/><xsl:value-of select=”link”/></xsl:attribute>Editar</a>/<a><xsl:attribute name=”href”>Listar.asp?nome=<xsl:value-of select=”nome”/><xsl:value-of select=”link”/></xsl:attribute>Apagar</a></td>
</tr>
</xsl:for-each>
</table>
</center>
</xsl:template>
</xsl:stylesheet>

Com o stylesheet (que não vem ao caso explicar no momento) vamos fazendo a estrutura de visualização de todos os elementos da tag usuario através de um for-each assim:

<xsl:for-each select=”cadastro/usuario”> e fechando com </xsl:for-each>

Pegamos o valor dos elementos com essa estrutura aqui: <xsl:value-of select=”nome_da_tag”/>.

Usamos o atributo <xsl:attribute name=”href”> para gerar links, no nosso caso para excluir e editar (que não será mostrado nesse artigo).

Em uma página chamada Listar.asp criamos os objetos para chamar o XML e o XSL e integrá-los com o transformNode:

Set XSLDOC = Server.CreateObject(“Microsoft.XMLDOM”)
Set XMLDOC = Server.CreateObject(“Microsoft.XMLDOM”)
XMLDOC.Load(Server.MapPath(“Banco.xml”))
XSLDOC.Load(Server.MapPath(“Visualizar.xsl”))
Response.Write(XMLDOC.transformNode(XSLDOC))

Para deletar é simples, criamos um XMLDOC.documentElement para escolher qual nó vamos deletar e chamamos por querystring como tem no <xsl:attribute name=”href”> do Visualizar.xsl, que no caso usamos o select=”nome”, deletando com o removeChild, segue abaixo o código completo de Listar.asp

Listar.asp

<%@ Language="VBScript" %>
<html>
<body>
<a href="Cadastro.asp">CADASTRAR</a> - <a href="Listar.asp">LISTAR</a>
<br><br>
<%
Set XSLDOC = Server.CreateObject("Microsoft.XMLDOM") ' Criando Objeto
Set XMLDOC = Server.CreateObject("Microsoft.XMLDOM") ' Criando Objeto

Listando Dados

XMLDOC.Load(Server.MapPath("Banco.xml"))
XSLDOC.Load(Server.MapPath("Visualizar.xsl"))
Response.Write(XMLDOC.transformNode(XSLDOC))

Deletando Dados

If CStr(Request.QueryString("Nome")) <> "" Then
Banco = Server.MapPath("Banco.xml") ' Chamando o Arquivo XML para sofrer alteração
XMLDOC.Load(Banco)
Set RaizXML = XMLDOC.documentElement
Set AlterarReg = RaizXML.selectSingleNode("usuario[nome='"&Request.QueryString("nome")&"']")
RaizXML.removeChild(AlterarReg) ' Linha de remoção de Objetos
XMLDOC.Save(Banco)
Response.Write("<script>alert('Deletado com Sucesso!');location='Listar.asp'</script>")
End If
Set XSLDOC = Nothing
Set XMLDOC = Nothing
%>
</body>
</html>

Uma observação: tentei fazer o mais fácil possível para garantir um bom entendimento na hora da programação. Qualquer alteração no código para facilitar os comandos será bem-vinda, então vamos lá.

Criem um arquivo chamado Editar.asp e nele serão lidas todas as tags que contém no arquivo Banco.xml , mas com a querystring passada pelo arquivo Ler.asp que criamos no artigo anterior. Vamos só alterar uma única tag, um único nó do XML. Lembrando que usei uma tag "nome": mas vocês poderiam criar uma tag "id" e colocar números seqüenciais ou randômicos, a escolha fica a critério.
Vamos primeiro listar todos os registros.
<%@ Language="VBScript" %>
<%
Dim Banco : Banco = Server.MapPath("Banco.xml")
Set XMLDOC = Server.CreateObject("Microsoft.XMLDOM")
Set objLER = Server.CreateObject("Microsoft.XMLDOM")
XMLDOC.Load(Banco)
Set objLER = XMLDOC.getElementsByTagName("*")

%>

Logo abaixo desse script vamos criar o formulário com um “for” fazendo a varredura nas tags para pegar só o valor de tag citado na querystring passada:

<html>
<body>
<a href=”Cadastro.asp”>CADASTRAR</a> – <a href=”Listar.asp”>LISTAR</a>
<br><br>
<form action=”Editar.asp?nome=<%=Request.QueryString(“nome”)%>” method=”post”>
<input type=”hidden” name=”CampoUpdate” value=”<%=Request.QueryString(“nome”)%>”>
<%
For i = 0 To (objLER.length – 1)
If objLER.Item(i).Text = “”&Request.QueryString(“nome”)&”" Then

%>

<b>Nome: </b><input type=”text” name=”Nome” value=”<% Response.Write(objLER.Item(i).Text) %>”><br>

<b>E-Mail: </b><input type=”text” name=”EMail” value=”<% Response.Write(objLER.Item(i+1).Text) %>”><br>

<b>Telefone: </b><input type=”text” name=”Telefone” value=”<% Response.Write(objLER.Item(i+2).Text) %>”><br>

<%

End If

Next

%>

<input type=”submit” value=”Editar” name=”btEdt”>

</form>

</body>

</html>

Reparem a linha onde temos If objLER.Item(i).Text = “”&Request.QueryString(“nome”)&”" Then, é ela que está “selecionando” a tag que quero mostrar.

E por fim a edição:

<%
If Request.Form(“btEdt”) = “Editar” Then
Dim Nome, EMail, Telefone, CampoUpdate, i
Nome             = Request.Form(“Nome”)
EMail              = Request.Form(“EMail”)
Telefone          = Request.Form(“Telefone”)
CampoUpdate = Request.Form(“CampoUpdate”)
Set objLER_upDate = XMLDOC.getElementsByTagName(“*”)

For i = 0 To (objLER.length – 1)

If objLER.Item(i).Text = “”&CampoUpdate&”" Then

objLER.Item(i).Text    = Nome

objLER.Item(i+1).Text            = EMail

objLER.Item(i+2).Text            = Telefone

End If

Next

XMLDOC.Save(Banco)

Response.Write(“<script>alert(‘Editado com Sucesso!’);location=’Listar.asp’</script>”)

Set objLER_upDate = Nothing

End If

Set objLER = Nothing

Set XMLDOC = Nothing

%>

Coloquei a querystring passada em um campo hidden e joguei ele dentro de um “for“, como fiz no formulário, em seguida troquei os valores pelas variáveis em seqüência, Nome, EMail e Telefone, salvei com o método XMLDOC.Save e passei um alert em JavaScript e pronto!!

Esse tipo de utilização do XML serve para coisas pequenas, por exemplo, um combo de país, cidades de um determinado estado, cores, dentre outros.

Comments

Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!





SEO Powered by Platinum SEO from Techblissonline