XSLT - แก้ไข XML

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

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

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

เราจะใช้ XSL เพื่อแปลง XML ไฟล์เป็นฟอร์ม 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 และสร้างช่องบันทึกเพื่อองค์ประกอบ "field" XML ในแต่ละตัว ค่า attribute id ขององค์ประกอบ field จะถูกเพิ่มเข้าไปใน attribute id และ name ของช่องบันทึก HTML ค่าขององค์ประกอบ "value" จะถูกเพิ่มเข้าไปใน attribute 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" ค่าของ attribute 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 ราก
Set rootEl = xmlDoc.documentElement
โดยการวนลูปผ่านชุด form
for i = 1 To Request.Form.Count
   โดยการลบ element ของปุ่มในฟอร์ม
   if instr(1,Request.Form.Key(i),"btn_")=0 then
   โดยใช้ method selectSingleNode สามารถค้นหาหนึ่งเดียวของ XML ไฟล์ที่ตรงกับคำค้นหา
   โดยการขอค่าของ element ที่มีค่า value โดยเป็นย่อยของ element ที่มี id
   โดยที่ element ที่มี id ที่สามารถตรงกันกับค่า key ของฟอร์ม
   โดยการตั้งค่าค่าของ 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 สามารถทำงานบนเบราเซอร์ทุกชนิด