XSLT Modifier XML
Les données stockées dans des fichiers XML peuvent être modifiées via un navigateur Internet.
Ouvrir, modifier et enregistrer du XML
Maintenant, nous allons vous montrer comment ouvrir, modifier et enregistrer des fichiers XML stockés sur le serveur.
Nous utiliserons XSL pour convertir le document XML en un formulaire HTML. La valeur de l'élément XML est écrite dans le champ de saisie HTML du formulaire HTML. Ce formulaire HTML est modifiable. Après avoir été modifiées, les données sont renvoyées au serveur et le fichier XML est mis à jour (cette opération est effectuée par ASP).
Fichiers XML et fichiers XSL
Tout d'abord, regardez le document XML ("tool.xml") qui sera utilisé :
<outil>
<id de champ="prodName">
<valeur>HAMMER HG2606</ value> ;
</field>
<field id="prodNo">
<value>32456240</value>
</field>
<field id = "prix">
<valeur>30,00 $</valeur>
</field>
</outil>
查看 XML 文件。
接着,请看下面的样式表("tool.xsl"):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<form method="post" action="edittool.html">
<h2>Informations sur l'outil (modifier) :</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 : nom de l'attribut="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="Soumettre" />
<input type="reset" id="btn_res" name="btn_res" value="Réinitialiser" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Afficher le fichier XSL.
Le fichier XSL ci-dessus parcourra les éléments du fichier XML et créera un champ de saisie pour chaque élément "champ" XML. La valeur de l'attribut "id" de l'élément XML "field" est ajoutée aux attributs "id" et "name" de chaque champ de saisie HTML. La valeur de chaque élément XML « valeur » est ajoutée à l'attribut « valeur » de chaque champ de saisie HTML. Le résultat est un formulaire HTML modifiable qui contient les valeurs du fichier XML.
Ensuite, nous avons une deuxième feuille de style : "tool_updated.xsl". Ce fichier XSL sera utilisé pour afficher les données XML mises à jour. Cette feuille de style ne générera pas un formulaire HTML modifiable, mais un formulaire HTML statique :
< ;xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/ ">
<html>
<body>
<h2>Informations sur l'outil mises à jour :</h2>
<table border="1">
< ;xsl:for-each select="tool/field">
<tr>
<td><xsl:value-of select="@id" /><
<td><xsl:value-of select="value" /></td>
</tr>
</xsl:for-each> </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Afficher le fichier XSL.
Fichier ASP
Dans le fichier "tool.xsl" ci-dessus, la valeur de l'attribut action du formulaire HTML est "edittool.asp" .
La page "edittool.asp" contient deux fonctions : la fonction loadFile() charge et convertit les fichiers XML, la fonction updateFile() met à jour les fichiers XML :
fonction loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'Charger le fichier XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc .load (xmlfile)
'Charger le fichier
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'Charger le fichier XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
' Définissez la variable rootEl égale à l'élément racine
Définissez rootEl = xmlDoc.documentElement
'Parcourez la collection de formulaires
pour i = 1 To Request.Form.Count
'Éliminez les éléments du bouton sous la forme
if instr (1,Request.Form.Key(i),"btn_")=0 then
'La méthode selectSingleNode interroge le fichier XML pour un seul nœud
'qui correspond à une requête . Cette requête demande l'élément value qui est
'l'enfant d'un élément de champ qui a un attribut id qui correspond
'à la valeur clé actuelle dans la collection de formulaires lorsqu'il y a une correspondance -
'set. la propriété de texte égale à la valeur du champ actuel dans la
'Form Collection.
set f = rootEl.selectSingleNode("field[@id='" & _
Request.Form.Key(i ) & "']/value" )
f.Text = Request.Form(i)
end if
next
'Enregistrez le fichier XML modifié
xmlDoc.save xmlfile
'Libérez toutes les références d'objets
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
'Chargez le fichier XML modifié avec une feuille de style qui
'permet au client de voir les informations modifiées
loadFile xmlfile,server.MapPath("tool_updated.xsl")
fin de fonction
'Si le formulaire a été soumis, mettez à jour le
'Fichier XML et affichage du résultat - sinon,
'transformez le fichier XML pour l'éditer
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml") ,server.MapPath("tool. xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>
Astuce :
Remarque : Nous convertissons et mettons à jour les fichiers XML situés sur le serveur. Il s'agit d'une solution multiplateforme. Le client reçoit uniquement le code HTML renvoyé par le serveur – et le code HTML s'exécute dans n'importe quel navigateur.