XSLT - Edit XML
- Halaman Sebelumnya XSLT di Server-Side
- Halaman Berikutnya Penyunting XSLT
Data yang disimpan dalam fail XML boleh disunting melalui pelayar internet.
Membuka, menyunting dan menyimpan XML
Sekarang, kami akan menunjukkan bagaimana untuk membuka, menyunting dan menyimpan fail XML yang disimpan di pelayan.
Kami akan menunjukkan bagaimana memuka, menyunting dan menyimpan fail XML yang disimpan di pelayan. Nilai elemen XML akan ditulis ke ruang input HTML dalam borang HTML. Borang ini adalah boleh disunting. Selepas disunting, data akan diserahkan kembali ke pelayan, dan fail XML akan dikemaskini (bagian ini dilakukan oleh ASP).
Fail XML dan Fail XSL
Dahulu, lihat dokumen XML yang akan digunakan ("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>
Seterusnya, lihat gaya penulisan di bawah ("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> Maklumat Alat (sunting):</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>
Fail XSL yang di atas akan mengulangi mengikuti elemen dalam fail XML dan akan membuat ruang input untuk setiap elemen "field" XML. Nilai atribut id elemen field ditambahkan ke atribut id dan name setiap ruang input HTML. Nilai elemen "value" ditambahkan ke atribut "value" setiap ruang input HTML. Akibatnya, dapatkan form HTML yang boleh diubah yang mengandungi nilai dalam fail XML.
Lalu, kami juga mempunyai laporan gaya kedua: "tool_updated.xsl". Fail XSL ini akan digunakan untuk menunjukkan data XML yang telah diubah. Laporan gaya ini tidak mengeluarkan form HTML yang boleh diubah, tetapi adalah taip HTML tabung statik:
<?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> Maklumat Alat Diperbaharui:</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>
Fail ASP
Dalam fail "tool.xsl", nilai atribut action form HTML adalah "edittool.asp".
Halaman "edittool.asp" mengandungi dua fungsi: loadFile() untuk memuat dan mengubah fail XML, serta fungsi updateFile() untuk mengubah fail XML:
<% function loadFile(xmlfile,xslfile) Dim xmlDoc,xslDoc Muat fail XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Muat fail XSL set xslDoc = Server.CreateObject("Microsoft.XMLDOM") xslDoc.async = false xslDoc.load(xslfile) Tukar fail Response.Write(xmlDoc.transformNode(xslDoc)) end function function updateFile(xmlfile) Dim xmlDoc,rootEl,f Dim i Muat fail XML set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false xmlDoc.load(xmlfile) Tetapkan rootEl ke elemen root Set rootEl = xmlDoc.documentElement Saring set borang for i = 1 To Request.Form.Count Buang elemen butang dalam borang if instr(1,Request.Form.Key(i),"btn_")=0 then Metode selectSingleNode boleh mencari satu node tunggal dalam fail XML yang padan dengan kawajian Pengkaji ini akan meminta elemen value, elemen value ini adalah anak elemen field Manakala elemen field ini mempunyai atribut id yang boleh dicocokkan dengan nilai kawasan semasa dalam borang Jika ada yang padan, atur atribut text ke nilai kawasan semasa dalam borang set f = rootEl.selectSingleNode("field[@id='" & _ Request.Form.Key(i) & "/value") f.Text = Request.Form(i) end if next Simpan fail XML yang diubah xmlDoc.save xmlfile Lepaskan semua alih referensi objek set xmlDoc=nothing set rootEl=nothing set f=nothing Melengkapkan fail XML yang diubah melalui stylesheet, supaya klien dapat lihat maklumat yang diedit loadFile xmlfile,server.MapPath("tool_updated.xsl") end function 'Jika formulir telah disubmit, update berkas XML dan tampilkan hasilnya, jika belum disubmit, konversi berkas XML ini untuk diedit if Request.Form("btn_sub")="" then loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl") else updateFile server.MapPath("tool.xml") end if %>
Petunjuk:Jika Anda tidak mengerti bagaimana menulis ASP, belajar buku kami <Panduan ASP》。
Keterangan:Kami sedang mengkonversi dan memperbarui berkas XML yang berada di server. Ini adalah solusi yang berbasis platform. Klien hanya dapat memperoleh HTML yang dipulangkan dari server - dan HTML dapat dijalankan di semua browser.
- Halaman Sebelumnya XSLT di Server-Side
- Halaman Berikutnya Penyunting XSLT