XSLT - Edit XML

Data yang disimpan di berkas XML dapat diedit melalui browser internet.

Buka, edit, dan simpan XML

Sekarang, kami akan menunjukkan bagaimana membuka, mengedit, dan menyimpan berkas XML yang disimpan di server.

Kami akan menunjukkan bagaimana menggunakan XSL untuk mengkonversi dokumen XML ke formulir HTML. Nilai elemen XML akan ditulis ke domain input HTML formulir. Formulir ini dapat diedit. Setelah diedit, data akan disubmit kembali ke server, dan berkas XML akan diperbarui (bagian ini diselesaikan oleh ASP).

Berkas XML dan Berkas XSL

Pertama, 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>

Lihat berkas XML.

Lanjutnya, lihat gaya tabel di bawah ini ("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>Informasi Alat (edit):</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>

Lihat berkas XSL.

Berkas XSL di atas akan mengulangi berbagai elemen di berkas XML dan membuat area input untuk setiap elemen "field" XML. Nilai atribut id elemen field ditambahkan ke atribut id dan name setiap area input HTML. Nilai elemen "value" ditambahkan ke atribut "value" setiap area input HTML. Akibatnya, dapat diobtain formulir HTML yang dapat diedit yang mengandung nilai dari berkas XML.

Lalu, kami punya style sheet kedua: "tool_updated.xsl". Berkas XSL ini akan digunakan untuk menampilkan data XML yang sudah diperbarui. Style sheet ini tidak mengeluarkan formulir HTML yang dapat diedit, tetapi sebuah tabel HTML statis:

<?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>Informasi Alat Diperbarui:</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>

Lihat berkas XSL.

Berkas ASP

Pada berkas "tool.xsl", nilai atribut action formulir HTML adalah "edittool.asp".

Halaman "edittool.asp" mengandung dua fungsi: loadFile() untuk memuat dan mengkonversi berkas XML, serta fungsi updateFile() untuk memperbarui berkas XML:

<%}}
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
Muat berkas XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Muat berkas XSL
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
Konversi berkas
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
Muat berkas XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
Atur variabel rootEl menjadi elemen root
Set rootEl = xmlDoc.documentElement
Lakukan perulangan melalui kumpulan form
for i = 1 To Request.Form.Count
   Buang elemen tombol di form
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   Metode selectSingleNode dapat mencari node tunggal yang cocok dalam berkas XML yang mencocok
   Pencarian ini akan meminta elemen value, elemen value ini adalah anak elemen field
   Yang field element ini memiliki atribut id yang dapat cocok dengan nilai key saat ini di form
   Jika ada yang cocok, atur atribut text menjadi nilai域 yang saat ini di form
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
Simpan berkas XML yang diubah
xmlDoc.save xmlfile
Lepaskan semua referensi objek
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
Melakukan pemuatan berkas XML yang diubah melalui stylesheet, sehingga klien dapat melihat informasi yang diedit
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
'Jika formulir sudah 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 dari <Panduan ASP》。

Keterangan:Kami sedang merubah dan memperbarui berkas XML yang berada di server. Ini adalah solusi yang berbasis platform. Klien hanya dapat memperoleh HTML yang dikembalikan dari server - dan HTML dapat dijalankan di setiap browser.