XSLT - Éditer XML
- Page précédente XSLT côté serveur
- Page suivante Éditeur XSLT
Les données stockées dans le fichier XML peuvent être éditées via un navigateur Internet.
Ouvrir, éditer et sauvegarder XML
Maintenant, nous allons vous montrer comment ouvrir, éditer et sauvegarder un fichier XML stocké sur le serveur.
Nous allons utiliser 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 effectuée par ASP).
Fichiers XML et 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 feuillet de styles ci-dessous ("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 (édition) :</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="Submit" /> <input type="reset" id="btn_res" name="btn_res" value="Réinitialiser" /> </form> </body> </html> </xsl:template> </xsl:stylesheet>
Ce fichier XSL itérera sur les éléments du fichier XML et créera 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 peut obtenir 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 produit pas de formulaire 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 du formulaire HTML est "edittool.asp" .
La page "edittool.asp" contient deux fonctions : loadFile() pour charger et convertir le fichier XML, et la fonction updateFile() pour mettre à jour le fichier XML :
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc Chargement du 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) Transformation du fichier Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i Chargement du fichier XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Définir rootEl comme élément racine Set rootEl = xmlDoc.documentElement Parcours de l'ensemble form for i = 1 To Request.Form.Count Suppression des éléments bouton du formulaire if instr(1,Request.Form.Key(i),"btn_")=0 then La méthode selectSingleNode peut rechercher un seul nœud dans un fichier XML correspondant à une requête. Cette requête demandera l'élément value, qui est un élément fils de l'élément field, Et cet élément field possède une propriété id qui peut correspondre à la valeur courante de la clé du formulaire. Si une correspondance existe, then la propriété text est définie sur la valeur du champ courant du formulaire. set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "]/value") f.Text = Request.Form(i) end if next Enregistrement du fichier XML modifié xmlDoc.save xmlfile Libération de toutes les références aux objets set xmlDoc=nothing set rootEl=nothing set f=nothing Chargement d'un fichier XML modifié via une feuille de style afin que le client puisse voir les informations éditées loadFile xmlfile,server.MapPath("tool_updated.xsl") end function Si le formulaire a été soumis, mettez à jour le fichier XML et affichez les résultats, sinon convertissez 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 notreTutoriels ASP》。
Remarque :Nous sommes en train de convertir et de mettre à jour le fichier XML situé sur le serveur. Il s'agit d'une solution plate-forme croisée. 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 Éditeur XSLT