XSLT - Editar XML

Los datos almacenados en los archivos XML pueden editarse a través de un navegador de internet.

Abrir, editar y guardar XML

Ahora, le mostraremos cómo abrir, editar y guardar archivos XML almacenados en el servidor.

Vamos a mostrarle cómo abrir, editar y guardar archivos XML almacenados en el servidor. Los valores de los elementos XML se escribirán en los campos de entrada HTML del formulario. Este formulario es editable. Después de editarlo, los datos se enviarán al servidor y se actualizará el archivo XML (esta parte es realizada por ASP).

Archivos XML y 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>

Ver archivo XML.

A continuación, vea la hoja de estilo ("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="Enviar" />
<input type="reset" id="btn_res" name="btn_res" value="Reset" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Ver archivo XSL.

Este archivo XSL recorrerá 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 agrega a los atributos id y name de cada campo de entrada HTML. El valor del elemento "value" se agrega 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.

Luego, también tenemos una segunda hoja de estilo: "tool_updated.xsl". Este archivo XSL se utilizará para mostrar los datos XML actualizados. Esta hoja de estilo no generará un formulario HTML editable, sino una tabla 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>Información de Herramienta Actualizada:</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>

Ver archivo XSL.

Archivo ASP

En el archivo "tool.xsl", el valor de la propiedad action del formulario HTML es "edittool.asp".

La página "edittool.asp" contiene dos funciones: loadFile() que carga y convierte archivos XML, y la función updateFile() que actualiza archivos XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
Cargar el archivo XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Cargar el archivo XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
Convertir el archivo
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 el 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,
   Y este elemento field posee un atributo id que puede coincidir con el valor actual del key del conjunto de formularios.
   Si existe una coincidencia, establecer el atributo text en el valor actual del dominio del 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 un archivo XML modificado a través de una hoja de estilo, de esta manera el cliente puede ver la información editada
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
'Si el formulario ha sido enviado, actualiza el archivo XML y muestra los resultados, si no ha sido enviado, convierte este archivo XML para su edición
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 sabes cómo escribir ASP, aprende nuestroTutoriales de ASP》。

Nota:Estamos convirtiendo y actualizando el archivo XML ubicado en el servidor. Esta es una solución multiplataforma. El cliente solo puede obtener el HTML devuelto por el servidor, que puede ejecutarse en cualquier navegador.