XSLT - Editare XML
- Pagina precedente XSLT sul lato server
- Pagina successiva Editor XSLT
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>
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>
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>
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.
- Pagina precedente XSLT sul lato server
- Pagina successiva Editor XSLT