Edición de XML con XSLT
- Página anterior XSLT en el lado del servidor
- Página siguiente Ejemplo de XSLT
Los datos almacenados en el archivo XML pueden ser editados a través de un navegador de internet.
Abrir, editar y guardar XML
Ahora, le mostraremos cómo abrir, editar y guardar un archivo XML almacenado en el servidor.
Vamos a usar XSL para convertir un documento XML a un formulario HTML. Los valores de los elementos XML se escribirán en los campos de entrada HTML del formulario. Este formulario es editable. Después de ser editado, los datos se enviarán de vuelta al servidor y el archivo XML se actualizará (esta parte se realiza con ASP).
Archivo XML y archivo XSL
Primero, vea el documento XML que se utilizará ("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 continuación, vea la hoja de estilo siguiente ("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>Información de Herramienta (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 archivo XSL recorrerá iterativamente los elementos del archivo XML y creará un campo de entrada para cada elemento "field" XML. El valor del atributo "id" del elemento "field" se añade a los atributos "id" y "name" de cada campo de entrada HTML. El valor del elemento "value" se añade al atributo "value" de cada campo de entrada HTML. Como resultado, se puede obtener un formulario HTML editable que contiene los valores del archivo XML.
Then, we also have a second stylesheet: "tool_updated.xsl". This XSL file will be used to display the updated XML data. This stylesheet will not output an editable HTML form, but a static HTML table:
<?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>Updated Tool Information:</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>
ASP file
In the "tool.xsl" file, the value of the action attribute of the HTML form is "edittool.asp" .
"edittool.asp" page includes two functions: loadFile() loads and transforms XML files, updateFile() function updates XML files:
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc cargar el archivo XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) load XSL file set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) transform file Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i cargar el archivo XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) establecer la variable rootEl como el elemento raíz Set rootEl = xmlDoc.documentElement recorrer el conjunto de formularios for i = 1 To Request.Form.Count eliminar los elementos de botón del formulario if instr(1,Request.Form.Key(i),"btn_")=0 then el método selectSingleNode puede buscar un nodo único en un archivo XML que coincida con una consulta esta consulta solicitará el elemento value, que es un subelemento del elemento field este elemento field posee una propiedad id que puede coincidir con el valor actual del key en el conjunto de formularios si existe una coincidencia, configure la propiedad text con el valor actual del campo en el conjunto de formularios set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "/value") f.Text = Request.Form(i) end if next guardar el archivo XML modificado xmlDoc.save xmlfile liberar todas las referencias a objetos set xmlDoc=nothing set rootEl=nothing set f=nothing cargar el archivo XML modificado mediante una hoja de estilo, de modo que el cliente pueda ver la información editada loadFile xmlfile,server.MapPath("tool_updated.xsl") end function si el formulario ya ha sido enviado, actualice el archivo XML y muestre los resultados, de lo contrario, convierta este archivo XML para editar if Request.Form("btn_sub")="" then loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl") else updateFile server.MapPath("tool.xml") end if %>
Consejo:Si no conoce cómo escribir ASP, aprenda de nuestroTutorial de ASP》。
Comentario:Estamos convirtiendo y actualizando los archivos XML ubicados en el servidor. Esta es una solución multiplataforma. El cliente solo puede obtener HTML devuelto por el servidor, que puede ejecutarse en cualquier navegador.
- Página anterior XSLT en el lado del servidor
- Página siguiente Ejemplo de XSLT