XSLT - แก้ไข XML
- หน้าก่อน XSLT บนเซิร์ฟเวอร์
- หน้าต่อไป เครื่องมือแก้ไข XSLT
ข้อมูลที่เก็บอยู่ในไฟล์ 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>
ด้วยนั้น กรุณาดูสไตล์ตาราง ("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 ดังกล่าวจะวนไปยังองค์ประกอบของไฟล์ 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>
ไฟล์ 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 สามารถทำงานบนเบราเซอร์ทุกชนิด
- หน้าก่อน XSLT บนเซิร์ฟเวอร์
- หน้าต่อไป เครื่องมือแก้ไข XSLT