XSLT - Editare XML

I dati memorizzati nei file XML possono essere modificati tramite un browser Internet.

Aprire, modificare e salvare file XML

Ora, vi mostreremo come aprire, modificare e salvare i file XML archiviati sul server.

Utilizzeremo XSL per convertire il documento XML in un modulo HTML. I valori degli elementi XML saranno scritti nei campi di input HTML del modulo. Questo modulo è modificabile. Dopo essere stato modificato, i dati saranno inviati al server e il file XML verrà aggiornato (questo viene fatto tramite ASP).

File XML e file XSL

Prima di tutto, guardate il documento XML che verrà utilizzato ("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>

Visualizza file XML.

Poi, guardate il foglio di stile sottostante ("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>Informazioni sull'strumento (modifica):</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="Invia" />
<input type="reset" id="btn_res" name="btn_res" value="Reset" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Visualizza il file XSL.

Questo file XSL itera attraverso gli elementi del file XML e crea un campo di input per ogni elemento "field" XML. Il valore dell'attributo id dell'elemento field viene aggiunto agli attributi id e name di ogni campo HTML di input. Il valore dell'elemento "value" viene aggiunto all'attributo "value" di ogni campo HTML di input. Di conseguenza, si ottiene un modulo HTML modificabile che contiene i valori del file XML.

Poi, abbiamo un secondo foglio di stile: "tool_updated.xsl". Questo file XSL viene utilizzato per visualizzare i dati XML aggiornati. Questo foglio di stile non esporta un modulo HTML modificabile, ma una tabella HTML statica:

<?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>Informazioni aggiornate dello strumento:</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>

Visualizza il file XSL.

File ASP

Nella pagina "tool.xsl", il valore dell'attributo action del modulo HTML è "edittool.asp".

La pagina "edittool.asp" contiene due funzioni: loadFile() per caricare e convertire il file XML, e la funzione updateFile() per aggiornare il file XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
Carica il file XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Carica il file XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
Converti il file
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
Carica il file XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Imposta il variabile rootEl come elemento radice
Set rootEl = xmlDoc.documentElement
Cicla attraverso il set form
for i = 1 To Request.Form.Count
   Rimuovi gli elementi pulsante dal modulo
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   Il metodo selectSingleNode può cercare un singolo nodo in un file XML che corrisponde a una query specifica.
   Questa query richiede l'elemento value, che è un figlio dell'elemento field,
   Il campo field possiede un attributo id che può corrispondere al valore key corrente nel set di moduli.
   Se esiste una corrispondenza, imposta l'attributo text al valore del campo corrente nel set di moduli.
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
Salva il file XML modificato
xmlDoc.save xmlfile
Rilascia tutte le referenze agli oggetti
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
Carica un file XML modificato tramite una tabella di stili in modo che il client possa vedere le informazioni modificate
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
'Se il modulo è stato inviato, aggiornare il file XML e visualizzare i risultati, altrimenti convertire questo file XML per la modifica
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>

Suggerimento:Se non conosci come scrivere ASP, impara il nostro:Tutorial ASP》。

Nota:Stiamo convertendo e aggiornando il file XML situato sul server. Questa è una soluzione piattaforma-independent. Il client può ottenere solo l'HTML restituito dal server, che può essere eseguito in qualsiasi browser.