Edit XML dengan XSLT

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

Buka, sunting, dan simpan XML

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

Kami akan menggunakan XSL untuk mengkonversi dokumen XML ke form HTML. Nilai elemen XML akan ditulis ke area input HTML form. Form ini dapat diedit. Setelah disunting, data akan disubmit kembali ke server, dan berkas XML akan diupdate (bagian ini diselenggarakan oleh ASP).

Berkas XML dan Berkas XSL

Awalnya, 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 Tool (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 ini akan mengulangi pengelompokan elemen dalam berkas XML dan membuat ruas input untuk setiap elemen "field" XML. Nilai atribut id elemen field ditambahkan ke atribut id dan name untuk setiap ruas HTML input. Nilai elemen "value" ditambahkan ke atribut "value" untuk setiap ruas HTML input. Akibatnya, dapat memperoleh formulir HTML yang dapat diedit yang mengandung nilai dari berkas XML.

Lalu, kami juga memiliki stylesheet kedua: "tool_updated.xsl". Berkas XSL ini akan digunakan untuk menampilkan data XML yang sudah diperbarui. Style sheet ini tidak akan mengeluarkan formulir HTML yang dapat diedit, tetapi 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

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

"edittool.asp" halaman mengandung dua fungsi: loadFile() untuk memuat dan merubah berkas XML, updateFile() fungsi untuk memperbarui berkas XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
memuat 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)
Pemrosesan Berkas
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
memuat berkas XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
atur variabel rootEl menjadi elemen root
Set rootEl = xmlDoc.documentElement
berulang melalui kumpulan formulir
for i = 1 To Request.Form.Count
   hilangkan elemen tombol di dalam formulir
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   metode selectSingleNode dapat mencari node tunggal di berkas XML yang cocok dengan kueri
   permintaan ini akan meminta elemen value, elemen value ini adalah anak dari elemen field
   kemudian elemen field ini memiliki atribut id yang dapat dicocokkan dengan nilai key saat ini di dalam kumpulan formulir
   jika ada yang cocok, atur atribut text menjadi nilai domain saat ini di dalam kumpulan formulir
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
simpan berkas XML yang telah diubah
xmlDoc.save xmlfile
melepas referensi objek semua
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
melalui suatu lembar gaya memuat berkas XML yang telah diubah, sehingga klien dapat melihat informasi yang diedit
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
jika formulir telah disubmit, maka perbarui berkas XML dan tampilkan hasilnya, jika belum disubmit, maka 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
%>

提示:假如您不了解如何编写 ASP,请学习我们的《ASP 教程

注释:我们正在转换并更新位于服务器上的 XML 文件。这是一个跨平台的解决方案。客户端仅能获得从服务器返回的 HTML - 而 HTML 可运行于任何浏览器。