บทความนี้จะอธิบายวิธีการแก้ไขข้อมูลเอกสาร XML แบบออนไลน์ผ่านตัวอย่างโดยละเอียด เนื่องจากการสนับสนุน XML ของ Netscape ค่อนข้างอ่อนแอ เพื่อให้เกิดการแลกเปลี่ยนข้อมูลข้ามแพลตฟอร์ม การประมวลผลข้อมูลจึงต้องดำเนินการบนฝั่งเซิร์ฟเวอร์ หากต้องการแก้ไขเอกสาร XML สิ่งแรกที่ต้องทำคือวิธีแยกและแสดงข้อมูลแก่ผู้เยี่ยมชม XSL เป็นทางออกที่ดีสำหรับเราในการแสดงไฟล์ XML ตัวอย่างต่อไปนี้ใช้สไตล์ชีต XSL เพื่อแสดงเอกสาร XML ให้ผู้ใช้แก้ไข จากนั้นส่งข้อมูลที่แก้ไขไปยังเซิร์ฟเวอร์ โดยที่ข้อมูลจะได้รับการอัปเดตทางฝั่งเซิร์ฟเวอร์ ASP (Active Server Pages) ถูกใช้ที่นี่เพื่อทำงานของเราให้เสร็จสิ้น
ขั้นแรก โหลดเอกสาร XML ที่เราต้องการแก้ไข โดยใช้ Document Object Model ของ Microsoft (Microsoft XMLDOM Object) และ XSL เอกสาร XML สามารถแปลงบนฝั่งเซิร์ฟเวอร์เป็นเนื้อหาไฟล์ HTML ที่สามารถแสดงบนฝั่งไคลเอ็นต์ได้ ก่อนอื่นเรามาดูกันว่าไฟล์ XML และ XSL ที่เราใช้มีหน้าตาเป็นอย่างไร
ไฟล์ XML: UserData.xml
<?xml version="1.0" encoding="gb2312"?>
<!-- แก้ไขด้วย XMLSPY v2004 rel. 4 U ( http://www.xmlspy.com ) โดย Dicky (Apple'S Eden) -->
<ข้อมูลผู้ใช้>
<Field ID="ชื่อ" TabOrder="1">
<FieldValue>ดิกกี้</FieldValue>
</สนาม>
<Field ID="เพศ" TabOrder="2">
<FieldValue>ชาย</FieldValue>
</สนาม>
<Field ID="UnitName" TabOrder="3">
<FieldValue>บริษัท Shanghai Ateam</FieldValue>
</สนาม>
<Field ID="ที่อยู่" TabOrder="4">
<FieldValue>เซี่ยงไฮ้,ZhongShan West Road 1800#,ห้อง 26A</FieldValue>
</สนาม>
<Field ID="โทรศัพท์" TabOrder="5">
<FieldValue>13800138000</FieldValue>
</สนาม>
<Field ID="อีเมล" TabOrder="6">
<FieldValue>[email protected]</FieldValue>
</สนาม>
</UserInfo>
ไฟล์ XSL: UserData.xsl
<?xml version="1.0" encoding="gb2312"?>
<!-- แก้ไขด้วย XMLSPY v2004 rel. 4 U ( http://www.xmlspy.com ) โดย Dicky (Apple'S Eden) -->
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:แม่แบบที่ตรงกัน="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<ร่างกาย>
<รูปแบบวิธีการ = "โพสต์" การกระทำ = "EditUserData.asp">
<h1>แก้ไขข้อมูลผู้ใช้:</h1>
<table border="1" เซลล์แพดดิ้ง="2">
<xsl:for-each select="UserInfo/Field">
<tr>
<td>
<xsl:value-of select="@ID"/>
</td>
<td>
<ประเภทอินพุต = "ข้อความ">
<xsl:ชื่อแอตทริบิวต์="ID"><xsl:value-of select="@ID"/></xsl:attribute>
<xsl:attribute name="ชื่อ"><xsl:value-of select="@ID"/></xsl:attribute>
<xsl:attribute name="Value"><xsl:value-of select="FieldValue"/></xsl:attribute>
</อินพุต>
</td>
</tr>
</xsl:สำหรับแต่ละ>
</ตาราง>
<br/>
<input type="submit" id="btnSubmit" name="btnSubmit" value="แก้ไข"/>
</แบบฟอร์ม>
</ร่างกาย>
</html>
</xsl:แม่แบบ>
</xsl:stylesheet>
ไฟล์ XSL ใช้ XSL: สำหรับแต่ละองค์ประกอบเพื่อสำรวจไฟล์ XML ทั้งหมด คุณลักษณะ "id" ของแต่ละองค์ประกอบ "field" ในไฟล์ XML และ "id" และ "id" ของ กล่องป้อนข้อความของชื่อแบบฟอร์ม HTML" สอดคล้องกับ ด้วยวิธีนี้ กล่องป้อนข้อความของแบบฟอร์ม HTML จะแสดงค่าองค์ประกอบของไฟล์ XML ไฟล์นี้รับผิดชอบการแปลงเอกสาร XML ฝั่งเซิร์ฟเวอร์เพื่อให้สามารถแสดงบนเบราว์เซอร์ต่างๆ
ต่อไปนี้เป็นโปรแกรมหลักซึ่งใช้ฟังก์ชันการเปิดและอัปเดตเอกสาร XML และตัดสินใจว่าจะอัปเดตโดยขึ้นอยู่กับว่าส่งแบบฟอร์มหรือไม่ ประกอบด้วยสองฟังก์ชัน คือ loadXMLFile มีหน้าที่ในการโหลดและแปลงไฟล์ XML ที่จะแสดง ส่วนฟังก์ชัน updateXML มีหน้าที่ในการอัพเดตไฟล์ XML
โปรแกรม EditUserData.asp เป็นดังนี้:
<%
'------------------------------------------------ - ---------
'กำหนดฟังก์ชัน LoadXMLFile() ซึ่งรับพารามิเตอร์สองตัว:
'strXMLFile - เส้นทางและชื่อไฟล์ของไฟล์ XML 'strXSLFilee - เส้นทางและชื่อไฟล์ของไฟล์ XSL'------------------------- ------- ----------------------------------
ฟังก์ชัน LoadXMLFile (strXMLFile, strXSLFile)
'ประกาศตัวแปรท้องถิ่น'
หรี่แสง objXML
หรี่แสง objXSL
'สร้างอินสแตนซ์วัตถุ XMLDOM เพื่อโหลดไฟล์ XML
ตั้ง objXML = Server.CreateObject("Microsoft.XMLDOM")
'ปิดโหมดการโหลดไฟล์แบบอะซิงโครนัส
objXML.Async = เท็จ
'โหลดไฟล์ XML!
objXML.โหลด (strXMLFile)
'สร้างอินสแตนซ์วัตถุ XMLDOM เพื่อโหลดไฟล์ XSL
ตั้ง objXSL = Server.CreateObject("Microsoft.XMLDOM")
'ปิดโหมดการโหลดไฟล์แบบอะซิงโครนัส
objXSL.Async = เท็จ
'โหลดไฟล์ XSL!
objXSL.โหลด (strXSLFile)
'ใช้เมธอด TransformerNode ของ XMLDOM เพื่อใช้สไตล์ชีต XSL กับเอกสาร XML แล้วส่งออกไปยังไคลเอ็นต์
การตอบกลับเขียน (objXML.TransFormNode (objXSL))
ฟังก์ชันสิ้นสุด
'------------------------------------------------ - -----------------
'ฟังก์ชัน updateXML() ได้รับหนึ่งพารามิเตอร์: strXMLFile - เส้นทางและชื่อไฟล์ของไฟล์ XML
'------------------------------------------------ - -----------------
ฟังก์ชั่น UpdateXML(strXMLFile)
'ประกาศตัวแปรท้องถิ่น'
ดิม objDom
ติ่ม objRoot
ติ่ม objField
ดิมเอ็กซ์
'สร้างอินสแตนซ์วัตถุ XMLDOM
ตั้ง objDOM = Server.CreateObject("Microsoft.XMLDOM")
'ปิดโหมดการโหลดไฟล์แบบอะซิงโครนัส
objDom.Async = เท็จ
'โหลดไฟล์ XML
objDom.Load strXMLFile
'ตั้งค่าองค์ประกอบราก
ตั้งค่า objRoot = objDom.DocumentElement
'สำรวจคอลเลกชัน FORM และเขียนข้อมูลที่ส่งไปยังไฟล์ XML
สำหรับ x = 1 เพื่อขอแบบฟอร์มนับ
'ตรวจสอบว่าข้อมูลที่ส่งมีปุ่มหรือไม่ หากเป็นเช่นนั้น ให้ละเว้นข้อมูลนี้
ถ้า Instr(1,Request.Form.Key(x),"btn") = 0 จากนั้น
'ตามโหมดแบบสอบถาม XSL ให้สร้างตัวแปร objField และแมปองค์ประกอบของแบบฟอร์มกับองค์ประกอบที่สอดคล้องกัน [field_value] ในเอกสาร XML
ตั้งค่า objField = objRoot.SelectSingleNode("Field[@ID='" & Request.Form.Key(x) & "']/FieldValue")
'เชื่อมโยงข้อมูลที่ส่งโดยแบบฟอร์มกับค่าโหนดในเอกสาร XML
objField.Text = คำขอแบบฟอร์ม (x)
สิ้นสุดถ้า
ต่อไป
'บันทึกไฟล์ XML ที่แก้ไข
objDom บันทึก strXMLFile
'เผยแพร่การอ้างอิงทั้งหมดไปยังวัตถุ
ตั้ง objDom = ไม่มีเลย
ตั้งค่า objRoot = ไม่มีเลย
ตั้งค่า objField = ไม่มีเลย
'เรียกใช้ฟังก์ชัน LoadXMLFile เพื่อแสดงไฟล์ XML ที่แก้ไขใหม่ไปยังไคลเอนต์โดยใช้สไตล์ชีต UpdateUserData.xsl
LoadXMLFile strXMLFile,Server.MapPath("UpdatedUserData.xsl")
ฟังก์ชันสิ้นสุด
'ตรวจสอบว่าส่งแบบฟอร์มสำเร็จหรือไม่ หากส่งแล้ว ให้อัปเดตไฟล์ XML หรือไม่ให้ไปที่สถานะการแก้ไข
ถ้า Request.Form("btnSubmit") = "" จากนั้น
LoadXMLFile Server.MapPath("UserData.xml"),Server.MapPath("UserData.xsl")
อื่น
UpdateXML Server.MapPath("UserData.xml")
สิ้นสุดถ้า
%>
เมื่อส่งแบบฟอร์มสำเร็จ เราจะใช้ UpdateUserData.xsl เพื่อแสดงข้อมูลที่เราเพิ่งแก้ไข
UpdateUserData.xsl เป็นดังนี้:
<?xml version="1.0" encoding="gb2312"?>
<!-- แก้ไขด้วย XMLSPY v2004 rel. 4 U ( http://www.xmlspy.com ) โดย Dicky (Apple'S Eden) -->
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:แม่แบบที่ตรงกัน="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<ร่างกาย>
<h1>อัปเดตข้อมูลผู้ใช้:</h1>
<table border="1" เซลล์แพดดิ้ง="2">
<xsl:for-each select="UserInfo/Field">
<tr>
<td>
<xsl:value-of select="@ID"/>
</td>
<td>
<xsl:value-of select="FieldValue"/>
</td>
</tr>
</xsl:สำหรับแต่ละ>
</ตาราง>
<แบบฟอร์ม>
<input type="button" value="Go Back" onclick="history.go(-1)"/>
</แบบฟอร์ม>
</ร่างกาย>
</html>
</xsl:แม่แบบ>
</xsl:stylesheet>
ข้างต้นเป็นเพียงตัวอย่างง่ายๆ ของแอปพลิเคชันข้ามแพลตฟอร์ม XML เราสามารถเขียนโปรแกรมที่มีประสิทธิภาพมากขึ้นเพื่อทำงานที่ซับซ้อนมากขึ้นได้ตามความต้องการเฉพาะ โปรแกรมทั้งหมดผ่านการดีบักภายใต้สภาพแวดล้อม Windows 2003 En+IIS 6.0+IE6.0+MSXML3.Dll