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"?>
<!-- editado com XMLSPY v2004 rel 4 U ( http://www.xmlspy.com ) por Dicky (Apple'S Eden) -->
<Informações do usuário>
<Field ID="Nome" TabOrder="1">
<FieldValue>Dicky</FieldValue>
</Campo>
<Field ID="Sexo" TabOrder="2">
<FieldValue>Masculino</FieldValue>
</Campo>
<Field ID="UnitName" TabOrder="3">
<FieldValue>Empresa Shanghai Ateam</FieldValue>
</Campo>
<Field ID="Endereço" TabOrder="4">
<FieldValue>ShangHai,ZhongShan West Road 1800#,Sala 26A</FieldValue>
</Campo>
<Field ID="Tel" TabOrder="5">
<FieldValue>13800138000</FieldValue>
</Campo>
<Field ID="EMail" TabOrder="6">
<FieldValue>[email protected]</FieldValue>
</Campo>
</UserInfo>
Arquivo XSL: UserData.xsl
<?xml version="1.0" encoding="gb2312"?>
<!-- editado com XMLSPY v2004 rel 4 U ( http://www.xmlspy.com ) por Dicky (Apple'S Eden) -->
<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>Editar informações do usuário:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="UserInfo/Field">
<tr>
<td>
<xsl:valor-de select="@ID"/>
</td>
<td>
<input type="texto">
<xsl:attribute name="ID"><xsl:value-of select="@ID"/></xsl:attribute>
<xsl:attribute name="Nome"><xsl:value-of select="@ID"/></xsl:attribute>
<xsl:attribute name="Value"><xsl:value-of select="FieldValue"/></xsl:attribute>
</input>
</td>
</tr>
</xsl:for-each>
</tabela>
<br/>
<input type="submit" id="btnSubmit" name="btnSubmit" value="Editar"/>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
O arquivo XSL usa o elemento XSL: for-each para percorrer todo o arquivo XML O atributo "id" de cada elemento "field" no arquivo XML e o "id" e "id" do. caixa de entrada de texto do nome do formulário HTML" corresponde a. 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 o nome do arquivo XSL'---------------------------------------- ------- ----------------------------------
Função LoadXMLFile(strXMLFile, strXSLFile)
'Declara variáveis locais
Escurecer objXML
Dim objXSL
'Instancia o objeto XMLDOM para carregar o arquivo XML.
Definir objXML = Server.CreateObject("Microsoft.XMLDOM")
'Desativa o modo de carregamento assíncrono de arquivos.
objXML.Async = Falso
'Carrega arquivo XML!
objXML.Load(strXMLFile)
'Instancia o objeto XMLDOM para carregar o arquivo XSL.
Definir objXSL = Server.CreateObject("Microsoft.XMLDOM")
'Desativa 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.
Response.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
'Instancia o objeto XMLDOM.
Definir objDOM = Server.CreateObject("Microsoft.XMLDOM")
'Desativa o modo de carregamento assíncrono de arquivos.
objDom.Async = Falso
'Carrega 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) & "']/FieldValue")
'Correlacione os dados enviados pelo formulário com os 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 UpdatedUserData.xsl.
LoadXMLFile strXMLFile,Server.MapPath("UpdatedUserData.xsl")
End Function
'Verifica 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 UpdatedUserData.xsl para exibir os dados que acabamos de editar.
UpdatedUserData.xsl é o seguinte:
<?xml version="1.0" encoding="gb2312"?>
<!-- editado com XMLSPY v2004 rel 4 U ( http://www.xmlspy.com ) por Dicky (Apple'S Eden) -->
<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>Informações do usuário atualizadas:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="UserInfo/Field">
<tr>
<td>
<xsl:valor-de select="@ID"/>
</td>
<td>
<xsl:value-of select="FieldValue"/>
</td>
</tr>
</xsl:for-each>
</tabela>
<formulário>
<input type="button" value="Voltar" onclick="history.go(-1)"/>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
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 passaram na depuração no ambiente Windows 2003 En+IIS 6.0+IE6.0+MSXML3.Dll.