XSLT - แก้ไข XML

ข้อมูลที่เก็บอยู่ในไฟล์ XML สามารถแก้ไขได้ผ่านทางเว็บเบราวเซอร์

เปิด แก้ไข และบันทึก XML

ตอนนี้ เราจะแสดงให้ท่านเห็นว่าจะเปิด แก้ไข และบันทึกไฟล์ XML ที่เก็บอยู่บนเซิร์ฟเวอร์

เราจะใช้ XSL เพื่อเปลี่ยน XML เอกสารเป็นฟอร์ม HTML นี้เรียกว่า HTML ฟิลด์เข้าไปในฟอร์ม HTML นี้ ซึ่งเป็นฟอร์มที่สามารถแก้ไขได้ หลังจากที่แก้ไขเสร็จแล้ว ข้อมูลจะถูกส่งกลับไปยังเซิร์ฟเวอร์ และไฟล์ XML จะได้รับการปรับปรุง (ส่วนนี้จะทำโดย ASP)

ไฟล์ XML และไฟล์ XSL

สามารถดูไฟล์ XML ที่จะถูกใช้ ("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>

ดูไฟล์ XML

ดังนั้น โปรดดูตารางแบบงานด้านล่าง ("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>ข้อมูลเครื่องมือ (แก้ไข):</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>

ตรวจสอบไฟล์ XSL

ข้อมูลที่อยู่ด้านบนของไฟล์ XSL นี้จะวนลู่ผ่านองค์ประกอบ XML ไฟล์และสร้างช่องเข้าที่แนบกับแบบฟอร์ม HTML ให้แก่แบบฟอร์ม "field" ทุกตัวอย่าง ค่าของรูปแบบ id ขององค์ประกอบ field ถูกเพิ่มเข้าไปในชื่อและรูปแบบ id และ name ของช่องเข้า HTML ค่าขององค์ประกอบ "value" ถูกเพิ่มเข้าไปในรูปแบบ "value" ของช่องเข้า HTML ผลลัพธ์คือ สามารถได้รับแบบฟอร์ม HTML ที่สามารถแก้ไขค่าของไฟล์ XML ได้

จากนั้น มีตารางสไตล์ตัวที่สอง: "tool_updated.xsl" ไฟล์ XSL นี้จะถูกใช้ในการแสดงข้อมูล XML ที่ปรับปรุงแล้ว ตารางสไตล์นี้จะไม่ส่งออกฟอร์ม HTML ที่สามารถแก้ไขได้ แต่เป็นตาราง HTML ที่สถานีตย์:

<?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>ข้อมูลยางเพิ่มเติม:</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>

ตรวจสอบไฟล์ XSL

ไฟล์ ASP

ในแบบงาน "tool.xsl" ตัวเลือก action ของฟอร์ม HTML คือ "edittool.asp" 。

"edittool.asp" หน้าแสดงความเป็นไปของสองฟังก์ชัน: loadFile() นำเข้าและแปลงเอกสาร XML และ updateFile() ฟังก์ชัน นำเข้าและปรับปรุงเอกสาร XML:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
โหลดไฟล์ XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
加载 XSL 文件
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
转换文件
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
โหลดไฟล์ XML
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
ตั้งค่าโครงสร้าง rootEl ให้เป็น element root
Set rootEl = xmlDoc.documentElement
วนลูปผ่านชุด form
for i = 1 To Request.Form.Count
   ลบออกส่วนของปุ่มในฟอร์ม
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   selectSingleNode มีความหมายว่าค้นหาตัวเดียวของ XML ไฟล์ที่ตรงกับคำค้นหา
   คำค้นหานี้จะขอค่าของ element value ซึ่งเป็น child element ของ element field
   ซึ่งฟิล์ด ซึ่งมี attribute id ที่สามารถตรวจพบในฟอร์มที่คงอยู่ในตอนนี้
   หากมีการตรวจพบ ก็ตั้งค่าค่าของ attribute text ให้เป็นค่าของฟิลด์ในฟอร์มที่คงอยู่ในตอนนี้
   set f = rootEl.selectSingleNode("field[@id='" & _
   Request.Form.Key(i) & "/value")
   f.Text = Request.Form(i)
   end if
next
บันทึกไฟล์ XML ที่ได้รับการปรับปรุง
xmlDoc.save xmlfile
ปลดความอ้างอิงของวัตถุทั้งหมด
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
โดยการใช้ตารางสไตล์เพื่อโหลดไฟล์ XML ที่ได้รับการปรับปรุง เพื่อให้โครงสร้างลูกค้าสามารถเห็นข้อมูลที่ได้แก้ไขได้
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
เมื่อฟอร์มได้ถูกส่งมอบแล้ว ก็ปรับปรุงไฟล์ XML และแสดงผล หากยังไม่ได้ส่งมอบ ก็เปลี่ยนแปลงไฟล์ XML สำหรับการแก้ไข
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 可運行於任何瀏覽器。