XSLT - Éditer XML

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>

Voir le fichier XML.

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>

Voir le fichier XSL.

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>

Voir le fichier XSL.

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.