Edição de XML no XSLT
- Página anterior XSLT no servidor
- Próxima página Exemplo XSLT
Os dados armazenados em arquivos XML podem ser editados através de um 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 converter documentos XML em formulários 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 e o arquivo XML será atualizado (esta parte é feita pelo ASP).
Arquivo XML e arquivo XSL
Primeiro, veja o documento XML a 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 a seguir ("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 HTML. O valor do elemento "value" é adicionado ao atributo "value" de cada campo HTML. Como resultado, é possível obter um formulário HTML editável contendo os valores do arquivo XML.
Então, temos ainda a segunda folha de estilo: "tool_updated.xsl". Este arquivo XSL será usado para exibir os dados XML atualizados. Esta folha de estilo não produz um 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() para carregar e converter arquivo XML, e updateFile() para 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 arquivo XSL set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) converter 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) Definir o rootEl como o elemento raiz Set rootEl = xmlDoc.documentElement Loop pelo conjunto de formulários for i = 1 To Request.Form.Count Excluir os 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ó em um 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 uma propriedade id que pode coincidir com o valor atual do key no conjunto de formulários. Se houver correspondência, configure a propriedade text para o valor atual do campo no conjunto de formulários. 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 o arquivo XML modificado com uma folha de estilo, para que o cliente possa ver 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, caso contrário, transforme 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 do ASP》。
Observação:Estamos convertendo e atualizando os arquivos XML localizados 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 Exemplo XSLT