XSLT - Editar XML
- Página Anterior XSLT no Servidor
- Próxima Página Editor de XSLT
Os dados armazenados em arquivos XML podem ser editados através do navegador da Internet.
Abrir, editar e salvar XML
Agora, vamos mostrar como abrir, editar e salvar arquivos XML armazenados no servidor.
Vamos usar o XSL para transformar o documento XML em um formulário HTML. Os valores dos elementos XML serão escritos nos campos de entrada HTML do formulário. Este formulário é editável. Após a edição, os dados serão enviados de volta ao servidor, atualizando o arquivo XML (esta parte é feita pelo ASP).
Arquivo XML e arquivo XSL
Primeiro, veja o documento XML que será usado ("tool.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?> <tool> <field id="prodName"> <value>HAMMER HG2606</value> </field> <field id="prodNo"> <value>32456240</value> </field> <field id="price"> <value>$30.00</value> </field> </tool>
A seguir, veja a tabela de estilos inferior ("tool.xsl"):
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <form method="post" action="edittool.asp"> <h2>Informações de Ferramenta (editar):</h2> <table border="0"> <xsl:for-each select="tool/field"> <tr> <td> <xsl:value-of 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="value" /> </xsl:attribute> </input> </td> </tr> </xsl:for-each> </table> <br /> <input type="submit" id="btn_sub" name="btn_sub" value="Submit" /> <input type="reset" id="btn_res" name="btn_res" value="Reset" /> </form> </body> </html> </xsl:template> </xsl:stylesheet>
Este arquivo XSL percorre os elementos do arquivo XML e cria um campo de entrada para cada elemento "field" XML. O valor do atributo id do elemento field é adicionado aos atributos id e name de cada campo de entrada HTML. O valor do elemento "value" é adicionado ao atributo "value" de cada campo de entrada HTML. Como resultado, podemos obter um formulário HTML editável que contém os valores do arquivo XML.
Então, temos a segunda tabela de estilo: "tool_updated.xsl". Este arquivo XSL será usado para exibir os dados XML atualizados. Esta tabela de estilo não gera formulário HTML editável, mas uma tabela HTML estática:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0"> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>Informações de Ferramenta Atualizadas:</h2> <table border="1"> <xsl:for-each select="tool/field"> <tr> <td><xsl:value-of select="@id" /></td> <td><xsl:value-of select="value" /></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Arquivo ASP
No arquivo "tool.xsl", o valor da propriedade action do formulário HTML é "edittool.asp" .
"edittool.asp" página contém duas funções: loadFile() carregar e transformar arquivo XML, updateFile() função atualizar arquivo XML:
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc Carregar o arquivo XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Carregar o arquivo XSL set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) Converter o arquivo Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i Carregar o arquivo XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Configurar o variável rootEl como o elemento raiz Set rootEl = xmlDoc.documentElement Percorrer o conjunto form for i = 1 To Request.Form.Count Remover elementos de botão do formulário if instr(1,Request.Form.Key(i),"btn_")=0 then O método selectSingleNode pode consultar um único nó no arquivo XML que coincide com uma consulta específica. Esta consulta solicitará o elemento value, que é um subelemento do elemento field, Este elemento field possui um atributo id que pode coincidir com o valor atual do key do formulário. Se houver correspondência, configurar o atributo text para o valor do campo atual do formulário. set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "]/value") f.Text = Request.Form(i) end if next Salvar o arquivo XML modificado xmlDoc.save xmlfile Liberar todas as referências de objetos set xmlDoc=nothing set rootEl=nothing set f=nothing Carregar um arquivo XML modificado através de uma folha de estilo, permitindo que o cliente veja as informações editadas loadFile xmlfile,server.MapPath("tool_updated.xsl") end function 'Se o formulário já foi submetido, atualize o arquivo XML e exiba os resultados, se não foi submetido, converta este arquivo XML para edição if Request.Form("btn_sub")="" then loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl") else updateFile server.MapPath("tool.xml") end if %>
Dica:Se você não sabe como escrever ASP, aprenda nossoTutorial ASP》。
Notas:Estamos convertendo e atualizando o arquivo XML localizado no servidor. Esta é uma solução cross-plataforma. O cliente pode obter apenas o HTML retornado pelo servidor, que pode ser executado em qualquer navegador.
- Página Anterior XSLT no Servidor
- Próxima Página Editor de XSLT