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

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.

You can leave a response, or trackback from your own site.

9 Responses to “Cadastrar, Listar, Editar e Excluir dados de um XML com ASP”

  1. Sandro disse:
    meu amigo sera que voce poderia me enviar ou postar novamente o arquivo sobre as dicas de Cadastrar, Listar, Editar e Excluir dados de um XML com ASP, pois nao consegui acompanhar o que foi colocado em seu site. muito obrigado
  2. Lincoln César disse:
    Amigo, lhe enviei o post por email, Obrigado pela critica como disem é com os erros que se chega aos acertos nao é?
    e continue acessando nossos conteudos, qualquer coisa só comentar..
    vlw
    Abraço
  3. Flavio disse:
    O cadastro é feito depois do fechamento da tag
    o que inviabiliza tudo!
  4. Osmio disse:
    Dae blz, não ta dando certo pra gravar será que vocÊ pode dar uma olhada

    http://www.radiortr.xpg.com.br/carlos.asp o xml esta dentro tambem.

    vlw

  5. Lincoln César disse:
    Blz, entao estou montando um pacote especial de duvidas para publicar esses dias, e estou fazendo um projeto de Website. Com isso estou meio sem tempo mais vou tentar resolver isso pra voce o mais rapido possivel.
    Obrigado pela participaçao no debugando.com

    Abraço

  6. Osmio disse:
    Daew blz o cadastrar eu consegui fazer mas o editar e os outros nao deu certo será que nao tem como me passar tudo montado os arquivos pra mim jogar no site e testar vlw

    osmio22@hotmail.com
    pode mandar nesse email

  7. Lucas S disse:
    Vlw pelo codigo, o cadastrar ta funcionando corretamente, so não estou conseguindo fazer ele listar, editar, ta dando um erro que não consegui achar ainda
    se possivel me envia uma solução

    lucasgdf@gmail.com

  8. ilehfenfy disse:
    Dispassionately,
  9. rodrigo disse:
    ola eu queria esse script tem como mandar para o meu email.

Leave a Reply

Powered by WordPress | Find Low APR Credit Cards at BestInCreditCards.com | Thanks to iApplyForCreditCards.com, RPG Soundtracks and Transfer of Equity
SEO Powered by Platinum SEO from Techblissonline