XSLT - Modifica XML
- Pagina precedente XSLT sul server
- Pagina successiva Esempio XSLT
I dati memorizzati nei file XML possono essere modificati tramite un browser Internet.
Aprire, modificare e salvare XML
Ora, vi mostreremo come aprire, modificare e salvare i file XML archiviati sul server.
Utilizzeremo XSL per convertire un documento XML in un modulo HTML. I valori degli elementi XML saranno scritti nei campi di input HTML. Questo modulo è modificabile. Dopo essere stato modificato, i dati saranno inviati indietro al server e il file XML verrà aggiornato (questo viene fatto da ASP).
File XML e file XSL
Prima di tutto, ecco 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>
Ecco il foglio di stile seguente ("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="Submit" /> <input type="reset" id="btn_res" name="btn_res" value="Reset" /> </form> </body> </html> </xsl:template> </xsl:stylesheet>
Questo file XSL esegue un ciclo su 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 a entrambi gli 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 editabile che contiene i valori del file XML.
Poi, abbiamo anche un secondo foglio di stili: "tool_updated.xsl". Questo file XSL verrà utilizzato per visualizzare i dati XML aggiornati. Questo foglio di stili non esporterà 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
Nel file "tool.xsl", il valore dell'attributo action del modulo HTML è "edittool.asp".
"edittool.asp" pagina contiene due funzioni: loadFile() per caricare e trasformare il file XML, updateFile() per aggiornare il file XML:
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc 'Caricare il file XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) 加载 XSL 文件 set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) 转换文件 Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i 'Caricare il file XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) 'Impostare la variabile rootEl come l'elemento radice Set rootEl = xmlDoc.documentElement 'Eseguire un ciclo attraverso la collezione form for i = 1 To Request.Form.Count 'Eliminare gli elementi pulsante del modulo if instr(1,Request.Form.Key(i),"btn_")=0 then 'Il metodo selectSingleNode può cercare un singolo nodo nel file XML che corrisponde a una query specifica. 'Questa query richiede l'elemento value, che è un figlio dell'elemento field, 'Questo elemento field possiede un attributo id che può corrispondere al valore corrente del key nel modulo. 'Se esiste una corrispondenza, impostare l'attributo text con il valore del campo corrente del modulo. set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "/value") f.Text = Request.Form(i) end if next 'Salvare il file XML modificato xmlDoc.save xmlfile 'Rilasciare tutte le referenze agli oggetti set xmlDoc=nothing set rootEl=nothing set f=nothing 'Caricare il file XML modificato attraverso uno stile di foglio, 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, studia il nostroTutorial di ASP">
Nota:Stiamo convertendo e aggiornando i file XML presenti sul server. Questa è una soluzione cross-platform. Il client può ricevere solo l'HTML restituito dal server, che può essere eseguito su qualsiasi browser.
- Pagina precedente XSLT sul server
- Pagina successiva Esempio XSLT