XSLT - Éditer XML
- Page précédente XSLT côté serveur
- Page suivante Exemple XSLT
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>
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>
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>
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.
- Page précédente XSLT côté serveur
- Page suivante Exemple XSLT