XSLT - Edit XML

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>

Lihat fail XML.

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>

Lihat fail XSL.

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>

Lihat fail XSL.

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.