Edição online de documentos XML usando XSL e ASP
Autor:Eve Cole
Data da Última Atualização:2009-06-23 16:38:26
Este artigo explica o método de edição online de dados de documentos XML por meio de um exemplo detalhado. Como o suporte do Netscape para XML é relativamente fraco, para conseguir a troca de dados entre plataformas, o processamento de dados deve ser realizado no lado do servidor. Para editar um documento XML, a primeira coisa a fazer é extrair e exibir os dados aos visitantes. XSL fornece uma boa solução para exibirmos arquivos XML. O exemplo a seguir usa uma folha de estilo XSL para exibir um documento XML para os usuários editarem e, em seguida, envia os dados editados ao servidor, onde os dados são atualizados no lado do servidor. ASP (Active Server Pages) é usado aqui para completar nossas tarefas.
Primeiro, carregue o documento XML que deseja editar. Usando o Document Object Model da Microsoft (Microsoft XMLDOM Object) e XSL, o documento XML pode ser convertido no lado do servidor em conteúdo de arquivo HTML que pode ser exibido no lado do cliente. Vamos primeiro dar uma olhada na aparência dos arquivos XML e XSL que usamos.
Arquivo XML: userdata.xml
<?xml version="1.0" encoding="gb2312"?>
<Perfil do usuário>
<field id="Nome" taborder="1">
<field_value>Mêncio</field_value>
</campo>
<field id="gênero" taborder="2">
<field_value>Masculino</field_value>
</campo>
<field id="Nome da organização" taborder="3">
<field_value>Corporação de Desenvolvimento de Tecnologia de Rede da China, filial de Pequim</field_value>
</campo>
<field id="Endereço detalhado" taborder="4">
<field_value>102º andar, Kerry Center, Pequim</field_value>
</campo>
<field id="Telefone" taborder="5">
<field_value>1391139136*</field_value>
</campo>
<field id="email" taborder="6">
<field_value>[email protected]</field_value>
</campo>
</perfil do usuário>
'www.knowsky.com
Arquivo XSL: userdata.xsl
<?xml version="1.0" encoding="gb2312" ?>
<xsl:folha de estilo xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<corpo>
<form method="post" action="Edituserdata.asp">
<h1>Edição do perfil do usuário:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Perfil/campo do usuário">
<tr>
<td>
<xsl:valor-de select="@id"/>
</td>
<td>
<input type="text"> <xsl:attribute name="id"> <xsl:value-of select="@id" /> </xsl:attribute> <xsl:attribute name="name"><xsl :value-of select="@id" /></xsl:attribute> <xsl:attribute name="value"> <xsl:value-of select="field_value" /> </xsl:attribute></input >
</td>
</tr>
</xsl:for-each>
</tabela>
<br />
<input type="submit" id="btnSubmit" name="btnSubmit" value="Edição completa" />
</form>
</body>
</html>
</xsl:template>
</xsl:folha de estilo>
O arquivo XSL usa o elemento XSL:for-each para percorrer todo o arquivo XML. O atributo "id" de cada elemento "campo" no arquivo XML corresponde ao "id" e ao "nome" da caixa de entrada de texto do. Formulário HTML. Desta forma, a caixa de entrada de texto do formulário HTML exibe o valor do elemento do arquivo XML. Este arquivo é responsável pela conversão do lado do servidor de documentos XML para que possam ser exibidos em vários navegadores.
A seguir está o programa principal, que implementa a função de abertura e atualização de documentos XML e decide se deseja atualizar com base no envio ou não do formulário. Contém duas funções, loadXMLFile é responsável por carregar e converter o arquivo XML a ser exibido; a função updateXML é responsável por atualizar o arquivo XML.
O programa Edituserdata.asp é o seguinte:
<%
''------------------------------------------------ ----------
''Defina a função loadXMLFile(), que recebe dois parâmetros:
''strXMLFile - o caminho e o nome do arquivo XML
''strXSLFilee - o caminho e nome do arquivo XSL
''www.knowsky.com
''------------------------------------------------ ----------
Função loadXMLFile(strXMLFile, strXSLFile)
''Declarar variáveis locais
Escurecer objXML
Dim objXSL
''Instancie um objeto XMLDOM para carregar arquivos XML.
definir objXML = Server.CreateObject("Microsoft.XMLDOM")
''Desative o modo de carregamento assíncrono de arquivos.
objXML.async = falso
''Carregar arquivo XML!
objXML.load(strXMLFile)
''Instancie o objeto XMLDOM para carregar o arquivo XSL.
definir objXSL = Server.CreateObject("Microsoft.XMLDOM")
''Desative o modo de carregamento assíncrono de arquivos.
objXSL.async = falso
''Carregar arquivo XSL!
objXSL.load(strXSLArquivo)
''Use o método transformNode de XMLDOM para aplicar a folha de estilo XSL ao documento XML e depois enviá-la para o cliente.
Resposta.Write(objXML.transformNode(objXSL))
Função final
''------------------------------------------------ ------------------
''A função updateXML() recebe um parâmetro: strXMLFile - o caminho e o nome do arquivo XML.
''------------------------------------------------ ------------------
Função updateXML(strXMLFile)
''Declarar variáveis locais.
Dim objDom
Dim objRoot
Dim objetoField
Escurecer x
''Instancie o objeto XMLDOM.
definir objDOM = Server.CreateObject("Microsoft.XMLDOM")
''Desative o modo de carregamento assíncrono de arquivos.
objDOM.async = falso
''Carregue o arquivo XML.
objDOM.load strXMLFile
''Defina o elemento raiz.
Definir objRoot = objDom.documentElement
''Percorra a coleção FORM e grave os dados enviados no arquivo XML.
Para x = 1 para Request.Form.Count
''Verifique se os dados enviados contêm um botão. Se sim, ignore esses dados.
Se instr(1,Request.Form.Key(x),"btn") = 0 Então
''De acordo com o modo de consulta XSL, estabeleça a variável objField e mapeie os elementos do formulário para os elementos correspondentes [field_value] no documento XML.
Definir objField = objRoot.selectSingleNode("field[@id=''" & Request.Form.Key(x) & "'']/field_value")
'' Corresponde os dados enviados pelo formulário aos valores dos nós no documento XML.
objField.Text = Solicitação.Form(x)
Terminar se
Próximo
''Salve o arquivo XML editado.
objDom.save strXMLFile
''Libere todas as referências ao objeto.
Definir objDom = Nada
Definir objRoot = Nada
Definir objField = Nada
''Chame a função loadXMLFile para exibir o arquivo XML recém-editado para o cliente usando a folha de estilo atualizadauserdata.xsl.
loadXMLFile strXMLFile,server.MapPath("updateduserdata.xsl")
Função final
''Verifique se o formulário foi enviado com sucesso, se enviado, atualize o arquivo XML, caso contrário, vá para o estado de edição;
Se Request.Form("btnSubmit") = "" Então
loadXMLFile server.MapPath("userdata.xml"),server.MapPath("userdata.xsl")
Outro
servidor updateXML.MapPath("userdata.xml")
Terminar se
%>
Quando o formulário é enviado com sucesso, usamos updateuserdata.xsl para exibir os dados que acabamos de editar.
atualizadouserdata.xsl é o seguinte:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:folha de estilo xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<corpo>
<h1>As informações atualizadas do usuário são as seguintes:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Perfil/campo do usuário">
<tr>
<td>
<xsl:valor-de select="@id" />
</td>
<td>
<xsl:valor-de select="field_value" />
</td>
</tr>
</xsl:for-each>
</tabela>
<formulário>
<input type="button" value="Return" onclick="history.go(-1)" />
</form>
</body>
</html>
</xsl:template>
</xsl:folha de estilo>
O texto acima é apenas um exemplo simples de aplicação XML multiplataforma. Com base em necessidades específicas, podemos escrever programas mais poderosos para completar nosso trabalho mais complexo. Todos os programas foram depurados e passados no ambiente WIN98SE+PWS+IE5.5+Netscape 4.75+Netscape 6+MSXML3.DLL.