Este artículo explica el método de edición en línea de datos de documentos XML mediante un ejemplo detallado. Dado que el soporte de Netscape para XML es relativamente débil, para lograr el intercambio de datos entre plataformas, el procesamiento de datos debe realizarse en el lado del servidor. Para editar un documento XML, lo primero que debemos hacer es cómo extraer y mostrar los datos a los visitantes. XSL nos proporciona una buena solución para mostrar archivos XML. El siguiente ejemplo utiliza una hoja de estilos XSL para mostrar un documento XML para que los usuarios lo editen y luego envía los datos editados al servidor, donde los datos se actualizan en el lado del servidor. Aquí se utiliza ASP (Active Server Pages) para completar nuestras tareas.
Primero, cargue el documento XML que queremos editar. Usando el modelo de objetos de documento de Microsoft (objeto XMLDOM de Microsoft) y XSL, el documento XML se puede convertir en el lado del servidor en contenido de archivo HTML que se puede mostrar en el lado del cliente. Primero echemos un vistazo a cómo se ven los archivos XML y XSL que utilizamos.
Archivo XML: UserData.xml
<?xml versión="1.0" codificación="gb2312"?>
<!-- editado con XMLSPY v2004 rel 4 U ( http://www.xmlspy.com ) por Dicky (Apple'S Eden) -->
<Información de usuario>
<ID de campo="Nombre" TabOrder="1">
<FieldValue>Dicky</FieldValue>
</campo>
<ID de campo="Sexo" TabOrder="2">
<FieldValue>Hombre</FieldValue>
</campo>
<ID de campo="Nombre de la unidad" TabOrder="3">
<FieldValue>Compañía del equipo de Shanghai</FieldValue>
</campo>
<ID de campo="Dirección" TabOrder="4">
<FieldValue>ShangHai,ZhongShan West Road 1800#,Sala 26A</FieldValue>
</campo>
<ID de campo="Tel" TabOrder="5">
<ValorDeCampo>13800138000</ValorDeCampo>
</campo>
<ID de campo="Correo electrónico" TabOrder="6">
<FieldValue>[email protected]</FieldValue>
</campo>
</UserInfo>
Archivo XSL: UserData.xsl
<?xml version="1.0" encoding="gb2312"?>
<!-- editado con XMLSPY v2004 rel 4 U ( http://www.xmlspy.com ) por Dicky (Apple'S Eden) -->
<xsl:hoja de estilo xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:coincidencia de plantilla="/">
<html>
<meta http-equiv="Tipo de contenido" content="text/html; charset=gb2312"/>
<cuerpo>
<formulario método="publicar" acción="EditUserData.asp">
<h1>Editar información de usuario:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Información de usuario/campo">
<tr>
<td>
<xsl:valor-de selección="@ID"/>
</td>
<td>
<tipo de entrada="texto">
<xsl:nombre del atributo="ID"><xsl:valor-de seleccionar="@ID"/></xsl:atributo>
<xsl:nombre del atributo="Nombre"><xsl:valor-de seleccionar="@ID"/></xsl:atributo>
<xsl:nombre del atributo="Valor"><xsl:valor-de seleccionar="ValorDeCampo"/></xsl:atributo>
</entrada>
</td>
</tr>
</xsl:para-cada>
</tabla>
<br/>
<tipo de entrada="enviar" id="btnSubmit" nombre="btnSubmit" valor="Editar"/>
</formulario>
</cuerpo>
</html>
</xsl:plantilla>
</xsl:stylesheet>
El archivo XSL utiliza el elemento XSL: for-each para recorrer todo el archivo XML. El atributo "id" de cada elemento "campo" en el archivo XML y el "id" y el "id" del archivo. cuadro de entrada de texto del nombre del formulario HTML" corresponde. De esta manera, el cuadro de entrada de texto del formulario HTML muestra el valor del elemento del archivo XML. Este archivo es responsable de la conversión del lado del servidor de documentos XML para que puedan mostrarse en varios navegadores.
El siguiente es el programa clave, que implementa la función de abrir y actualizar documentos XML, y decide si actualizar en función de si el formulario se envía o no. Contiene dos funciones, loadXMLFile es responsable de cargar y convertir el archivo XML que se mostrará; la función updateXML es responsable de actualizar el archivo XML.
El programa EditUserData.asp es el siguiente:
<%
'------------------------------------------------ - ---------
'Defina la función LoadXMLFile(), que recibe dos parámetros:
'strXMLFile - La ruta y el nombre de archivo del archivo XML 'strXSLFilee - La ruta y el nombre de archivo del archivo XSL'------------------------- ------- ----------------------------------
Función CargarXMLFile(strXMLFile, strXSLFile)
'Declarar variables locales
objXML atenuado
objeto oscuroXSL
'Crea una instancia del objeto XMLDOM para cargar el archivo XML.
Establecer objXML = Server.CreateObject ("Microsoft.XMLDOM")
'Desactivar el modo de carga asincrónica de archivos.
objXML.Async = Falso
'¡Cargue el archivo XML!
objXML.Load(strXMLFile)
'Crea una instancia del objeto XMLDOM para cargar el archivo XSL.
Establecer objXSL = Server.CreateObject ("Microsoft.XMLDOM")
'Desactivar el modo de carga asincrónica de archivos.
objXSL.Async = Falso
'¡Cargue el archivo XSL!
objXSL.Load(strXSLFile)
'Utilice el método transformNode de XMLDOM para aplicar la hoja de estilos XSL al documento XML y luego enviarlo al cliente.
Respuesta.Escribir(objXML.TransFormNode(objXSL))
Función final
'------------------------------------------------ - -----------------
'La función updateXML() recibe un parámetro: strXMLFile: la ruta y el nombre del archivo XML.
'------------------------------------------------ - -----------------
Función UpdateXML(strXMLFile)
'Declarar variables locales.
objeto oscuro
Raíz de objeto tenue
Campo de objeto tenue
tenue x
'Crea una instancia del objeto XMLDOM.
Establecer objDOM = Server.CreateObject ("Microsoft.XMLDOM")
'Desactivar el modo de carga asincrónica de archivos.
objDom.Async = Falso
'Cargar archivo XML.
objDom.Cargar strXMLFile
'Establece el elemento raíz.
Establecer objRoot = objDom.DocumentElement
'Recorre la colección FORM y escribe los datos enviados en el archivo XML.
Para x = 1 Para solicitar.formulario.count
'Comprueba si los datos enviados contienen un botón. Si es así, ignora estos datos.
Si Instr(1,Request.Form.Key(x),"btn") = 0 Entonces
'Según el modo de consulta XSL, establezca la variable objField y asigne los elementos del formulario a los elementos correspondientes [valor_campo] en el documento XML.
Establecer objField = objRoot.SelectSingleNode("Field[@ID='" & Request.Form.Key(x) & "']/FieldValue")
'Correlaciona los datos enviados por el formulario con los valores de nodo en el documento XML.
objField.Text = Solicitud.Form(x)
Terminar si
Próximo
'Guarde el archivo XML editado.
objDom.Guardar strXMLFile
'Liberar todas las referencias al objeto.
Establecer objDom = Nada
Establecer objRoot = Nada
Establecer objField = Nada
'Llame a la función LoadXMLFile para mostrar el archivo XML recién editado al cliente utilizando la hoja de estilo UpdatedUserData.xsl.
LoadXMLFile strXMLFile,Server.MapPath("UpdatedUserData.xsl")
Función final
'Comprueba si el formulario se envió correctamente; si se envía, actualiza el archivo XML; de lo contrario, pasa al estado de edición.
Si Request.Form("btnSubmit") = "" Entonces
LoadXMLFile Server.MapPath("UserData.xml"),Server.MapPath("UserData.xsl")
Demás
UpdateXML Server.MapPath("UserData.xml")
Terminar si
%>
Cuando el formulario se envía correctamente, utilizamos UpdatedUserData.xsl para mostrar los datos que acabamos de editar.
UpdatedUserData.xsl es el siguiente:
<?xml version="1.0" encoding="gb2312"?>
<!-- editado con XMLSPY v2004 rel 4 U ( http://www.xmlspy.com ) por Dicky (Apple'S Eden) -->
<xsl:hoja de estilo xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:coincidencia de plantilla="/">
<html>
<meta http-equiv="Tipo de contenido" content="text/html; charset=gb2312"/>
<cuerpo>
<h1>Información de usuario actualizada:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Información de usuario/campo">
<tr>
<td>
<xsl:valor-de selección="@ID"/>
</td>
<td>
<xsl:valor-de seleccionar="ValorDeCampo"/>
</td>
</tr>
</xsl:para-cada>
</tabla>
<formulario>
<tipo de entrada="botón" valor="Volver" onclick="history.go(-1)"/>
</formulario>
</cuerpo>
</html>
</xsl:plantilla>
</xsl:stylesheet>
Lo anterior es solo un ejemplo simple de una aplicación multiplataforma XML. Según necesidades específicas, podemos escribir programas más potentes para completar nuestro trabajo más complejo. Todos los programas pasaron la depuración en el entorno Windows 2003 En+IIS 6.0+IE6.0+MSXML3.Dll.