Édition en ligne de documents XML à l'aide de XSL et ASP
Auteur:Eve Cole
Date de mise à jour:2009-06-23 16:38:26
Cet article explique la méthode d'édition en ligne des données d'un document XML à travers un exemple détaillé. Étant donné que la prise en charge de XML par Netscape est relativement faible, pour réaliser un échange de données multiplateforme, le traitement des données doit être effectué côté serveur. Pour éditer un document XML, la première chose à faire est de savoir comment extraire et afficher les données aux visiteurs. XSL nous fournit une bonne solution pour afficher les fichiers XML. L'exemple suivant utilise une feuille de style XSL pour afficher un document XML que les utilisateurs peuvent modifier, puis soumet les données modifiées au serveur, où les données sont mises à jour côté serveur. ASP (Active Server Pages) est utilisé ici pour accomplir nos tâches.
Tout d'abord, chargez le document XML que vous souhaitez modifier. À l'aide du modèle d'objet de document de Microsoft (objet Microsoft XMLDOM) et de XSL, le document XML peut être converti côté serveur en contenu de fichier HTML pouvant être affiché côté client. Voyons d'abord à quoi ressemblent les fichiers XML et XSL que nous utilisons.
Fichier XML : userdata.xml
<?xml version="1.0" encoding="gb2312"?>
<Profil utilisateur>
<id du champ="Nom" taborder="1">
<field_value>Mencius</field_value>
</champ>
<id du champ="gender" taborder="2">
<field_value>Homme</field_value>
</champ>
<field id="Nom de l'organisation" taborder="3">
<field_value>Succursale de Pékin de la China Network Technology Development Corporation</field_value>
</champ>
<field id="Adresse détaillée" taborder="4">
<field_value>102e étage, Kerry Center, Pékin</field_value>
</champ>
<field id="Téléphone" taborder="5">
<field_value>1391139136*</field_value>
</champ>
<id du champ="email" taborder="6">
<field_value>[email protected]</field_value>
</champ>
</profil utilisateur>
'www.knowsky.com
Fichier XSL : userdata.xsl
<?xml version="1.0" encodage="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<corps>
<form method="post" action="Edituserdata.asp">
<h1>Modification du profil utilisateur :</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Profil/champ utilisateur">
<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="field_value" /> </xsl:attribute></input >
</td>
</tr>
</xsl:pour-chacun>
</table>
<br />
<input type="submit" id="btnSubmit" name="btnSubmit" value="Edition complète" />
</form>
</corps>
</html>
</xsl:modèle>
</xsl:feuille de style>
Le fichier XSL utilise l'élément XSL:for-each pour parcourir l'intégralité du fichier XML. L'attribut "id" de chaque élément "field" dans le fichier XML correspond à "id" et "name" de la zone de saisie de texte du fichier. Formulaire HTML. De cette manière, la zone de saisie de texte du formulaire HTML affiche la valeur de l'élément du fichier XML. Ce fichier est responsable de la conversion côté serveur des documents XML afin qu'ils puissent être affichés sur différents navigateurs.
Voici le programme clé, qui implémente la fonction d'ouverture et de mise à jour des documents XML, et décide de mettre à jour selon que le formulaire est soumis ou non. Il contient deux fonctions, loadXMLFile est responsable du chargement et de la conversion du fichier XML à afficher ; la fonction updateXML est responsable de la mise à jour du fichier XML.
Le programme Edituserdata.asp est le suivant :
<%
''------------------------------------------------ ----------
''Définissez la fonction loadXMLFile(), qui reçoit deux paramètres :
'' strXMLFile - le chemin et le nom du fichier XML
''strXSLFilee - le chemin et le nom du fichier XSL
'' www.knowsky.com
''------------------------------------------------ ----------
Fonction loadXMLFile(strXMLFile, strXSLFile)
''Déclarer les variables locales
Faible objXML
Dim objXSL
''Instanciez un objet XMLDOM pour charger des fichiers XML.
set objXML = Server.CreateObject("Microsoft.XMLDOM")
'' Désactivez le mode de chargement de fichiers asynchrone.
objXML.async = faux
''Chargez le fichier XML !
objXML.load(strXMLFile)
''Instanciez l'objet XMLDOM pour charger le fichier XSL.
set objXSL = Server.CreateObject("Microsoft.XMLDOM")
'' Désactivez le mode de chargement de fichiers asynchrone.
objXSL.async = faux
''Chargez le fichier XSL !
objXSL.load(strXSLFile)
''Utilisez la méthode transformNode de XMLDOM pour appliquer la feuille de style XSL au document XML, puis envoyez-la au client.
Réponse.Write(objXML.transformNode(objXSL))
Fonction de fin
''------------------------------------------------ -------------------
''La fonction updateXML() reçoit un paramètre : strXMLFile - le chemin et le nom du fichier XML.
''------------------------------------------------ -------------------
Fonction updateXML(strXMLFile)
'' Déclarez les variables locales.
Dim objDom
Faible objRoot
Dim objField
Dim x
''Instanciez l'objet XMLDOM.
set objDOM = Server.CreateObject("Microsoft.XMLDOM")
'' Désactivez le mode de chargement de fichiers asynchrone.
objDOM.async = faux
''Chargez le fichier XML.
objDOM.load strXMLFile
''Définissez l'élément racine.
Définir objRoot = objDom.documentElement
''Parcourez la collection FORM et écrivez les données soumises dans le fichier XML.
Pour x = 1 à Request.Form.Count
''Vérifiez si les données soumises contiennent un bouton. Si tel est le cas, ignorez ces données.
Si instr(1,Request.Form.Key(x),"btn") = 0 Alors
''Selon le mode de requête XSL, établissez la variable objField et mappez les éléments du formulaire aux éléments correspondants [field_value] dans le document XML.
Définir objField = objRoot.selectSingleNode("field[@id=''" & Request.Form.Key(x) & "'']/field_value")
'' Correspond aux données soumises par le formulaire aux valeurs des nœuds dans le document XML.
objField.Text = Requête.Form(x)
Fin si
Suivant
'' Enregistrez le fichier XML modifié.
objDom.save strXMLFile
'' Libérez toutes les références à l'objet.
Définir objDom = Rien
Définir objRoot = Rien
Définir objField = Rien
''Appelez la fonction loadXMLFile pour afficher le fichier XML nouvellement modifié au client à l'aide de la feuille de style mise à jouruserdata.xsl.
loadXMLFile strXMLFile,server.MapPath("updateduserdata.xsl")
Fonction de fin
''Vérifiez si le formulaire est soumis avec succès, s'il est soumis, mettez à jour le fichier XML ; sinon, passez à l'état d'édition.
Si Request.Form("btnSubmit") = "" Alors
loadXMLFile server.MapPath("userdata.xml"),server.MapPath("userdata.xsl")
Autre
serveur updateXML.MapPath("userdata.xml")
Fin si
%>
Lorsque le formulaire est soumis avec succès, nous utilisons updateuserdata.xsl pour afficher les données que nous venons de modifier.
updateuserdata.xsl est le suivant :
<?xml version="1.0" encodage="gb2312" ?>
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<corps>
<h1>Les informations utilisateur mises à jour sont les suivantes :</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="Profil/champ utilisateur">
<tr>
<td>
<xsl:value-of select="@id" />
</td>
<td>
<xsl:value-of select="field_value" />
</td>
</tr>
</xsl:pour-chacun>
</table>
<formulaire>
<input type="button" value="Return" onclick="history.go(-1)" />
</form>
</corps>
</html>
</xsl:modèle>
</xsl:feuille de style>
Ce qui précède n'est qu'un simple exemple d'application XML multiplateforme. En fonction de besoins spécifiques, nous pouvons écrire des programmes plus puissants pour accomplir notre travail plus complexe. Tous les programmes ont été débogués et transmis dans l'environnement WIN98SE+PWS+IE5.5+Netscape 4.75+Netscape 6+MSXML3.DLL.