XSLT - Éditer XML

Les données stockées dans le fichier XML peuvent être éditées via un navigateur web.

Ouvrir, éditer et sauvegarder XML

Maintenant, nous vous montrerons comment ouvrir, éditer et sauvegarder un fichier XML stocké sur le serveur.

Nous utiliserons XSL pour convertir un document XML en un formulaire HTML. Les valeurs des éléments XML seront écrites dans les champs d'entrée HTML du formulaire. Ce formulaire est éditable. Une fois édité, les données seront soumises au serveur et le fichier XML sera mis à jour (cette partie est réalisée par ASP).

Fichier XML et fichier XSL

D'abord, regardez le document XML utilisé ("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>

Voir le fichier XML.

Ensuite, regardez le tableau de styles suivant ("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>Informations sur l'outil (éditer) :</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="Soumettre" />
<input type="reset" id="btn_res" name="btn_res" value="Réinitialiser" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Voir le fichier XSL.

Ce fichier XSL en question parcourt cycliquement les éléments de fichiers XML et crée un champ d'entrée pour chaque élément "field" XML. La valeur de l'attribut "id" de l'élément "field" est ajoutée aux attributs "id" et "name" de chaque champ HTML d'entrée. La valeur de l'élément "value" est ajoutée à l'attribut "value" de chaque champ HTML d'entrée. En conséquence, on obtient un formulaire HTML éditable contenant les valeurs du fichier XML.

Ensuite, nous avons un 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 produira pas de forme HTML éditable, mais une table HTML statique :

<?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>Informations sur l'outil mis à jour :</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>

Voir le fichier XSL.

Fichier ASP

Dans le fichier "tool.xsl", la valeur de l'attribut action de la forme HTML est "edittool.asp" .

"edittool.asp" page contient deux fonctions : loadFile() pour charger et convertir le fichier XML, et updateFile() pour mettre à jour le fichier XML :

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
charger le fichier XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Chargement du fichier XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
Conversion de 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éfinir rootEl comme l'élément racine
Set rootEl = xmlDoc.documentElement
parcourir le ensemble form
for i = 1 To Request.Form.Count
   supprimer les éléments de bouton du formulaire
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   la méthode selectSingleNode peut rechercher un seul nœud correspondant à une requête dans un fichier XML
   cette requête demandera l'élément value, qui est un élément fils de l'élément field
   et que cet élément field possède un attribut id qui peut correspondre à la valeur actuelle de la clé du formulaire
   si une correspondance existe, définir l'attribut text sur la valeur du champ actuel du formulaire
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
enregistrer le fichier XML modifié
xmlDoc.save xmlfile
libérer toutes les références aux objets
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
charger le fichier XML modifié à l'aide d'une feuille de style, de sorte que le client puisse voir les informations éditées
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
si le formulaire a déjà été soumis, mise à jour du fichier XML et affichage des résultats, sinon conversion de ce fichier XML pour l'édition
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>

Astuce :Si vous ne savez pas comment écrire en ASP, apprenez notre «Tutoriel ASP]

Remarque :Nous convertissons et mettons à jour les fichiers XML situés sur le serveur. Il s'agit d'une solution plate-forme. Le client ne peut obtenir que l'HTML retourné par le serveur - et l'HTML peut s'exécuter sur n'importe quel navigateur.