Edit XML XSLT

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

Buka, sunting, dan simpan XML

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

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

Fail XML dan fail 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 fail XML.

Berikutnya, lihat skema 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>Information 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 fail XSL.

Failsya XSL ini akan keliling keluar elemen dalam fail XML dan akan cipta ruang input bagi setiap elemen "field" XML. Nama ciri id bagi elemen field akan ditambah ke setiap ciri id dan name bagi ruang input HTML. Nama nilai bagi elemen "value" akan ditambah ke setiap ciri "value" bagi ruang input HTML. Hasilnya, boleh dapat form HTML yang boleh diedit yang mengandungi nilai dalam fail XML.

kemudian, kami juga ada laporan gaya kedua: "tool_updated.xsl". Fail XSL ini akan digunakan untuk menunjukkan data XML yang telah diubah. Laporan gaya ini tidak akan mengeluarkan form HTML boleh diubah, tetapi adalah sebuah jadwal HTML 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>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 fail XSL.

Fail ASP

Dalam fail "tool.xsl" tindakan HTML form atribut nilai adalah "edittool.asp".

"edittool.asp" laman halaman mengandungi dua fungsi: loadFile() memuat dan pindah fail XML, updateFile() fungsi mengemaskini fail XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
memuat 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)
pindah suai fail
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
memuat fail XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
tetapkan rootEl kepada elemen utama
Set rootEl = xmlDoc.documentElement
mengulangi setiap borang
for i = 1 To Request.Form.Count
   buang elemen butang dalam borang
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   metoden selectSingleNode boleh mencari satu titik dalam fail XML yang padan kepada kawalan carian
   pencarian ini akan meminta elemen value, elemen value ini adalah anak elemen field
   dan elemen field ini mempunyai atribut id yang boleh dipadankan dengan nilai kawasan dalam borang
   jika ada yang padan, maka tetapkan atribut text untuk nilai kawasan yang sekarang 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 telah diubah
xmlDoc.save xmlfile
melepaskan semua rujukan objek
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
melalui sejenis imej gaya memuat fail XML yang telah diubah, supaya klien dapat lihat maklumat yang diedit
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
jika borang telah disumbang, maka kemas kini fail XML dan tunjukkan hasil, jika belum disumbang, maka tarik balik fail 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 可运行于任何浏览器。