การแก้ไขเอกสาร XML แบบออนไลน์โดยใช้ XSL และ ASP
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-06-23 16:38:26
บทความนี้จะอธิบายวิธีการแก้ไขข้อมูลเอกสาร 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"?>
<โปรไฟล์ผู้ใช้>
<field id="ชื่อ" taborder="1">
<field_value>เม็นเซียส</field_value>
</ฟิลด์>
<field id="gender" taborder="2">
<field_value>ชาย</field_value>
</ฟิลด์>
<field id="ชื่อองค์กร" taborder="3">
<field_value>China Network Technology Development Corporation สาขาปักกิ่ง</field_value>
</ฟิลด์>
<field id="ที่อยู่โดยละเอียด" taborder="4">
<field_value>ชั้น 102 Kerry Center ปักกิ่ง</field_value>
</ฟิลด์>
<field id="โทรศัพท์" taborder="5">
<field_value>1391139136*</field_value>
</ฟิลด์>
<field id="email" taborder="6">
<field_value>[email protected]</field_value>
</ฟิลด์>
</โปรไฟล์ผู้ใช้>
'www.knowsky.com'
ไฟล์ XSL: userdata.xsl
<?xml version="1.0" encoding="gb2312" ?>
<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="โปรไฟล์ผู้ใช้/ฟิลด์">
<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="field_value" /> </xsl:attribute></input >
</td>
</tr>
</xsl:สำหรับแต่ละ>
</ตาราง>
<br />
<input type="submit" id="btnSubmit" name="btnSubmit" value="แก้ไขให้เสร็จสิ้น" />
</แบบฟอร์ม>
</ร่างกาย>
</html>
</xsl:แม่แบบ>
</xsl:สไตล์ชีท>
ไฟล์ XSL ใช้องค์ประกอบ XSL:for-each เพื่อสำรวจไฟล์ XML ทั้งหมด คุณลักษณะ "id" ของแต่ละองค์ประกอบ "field" ในไฟล์ XML สอดคล้องกับ "id" และ "name" ของช่องป้อนข้อความของ แบบฟอร์ม HTML ด้วยวิธีนี้ กล่องป้อนข้อความของแบบฟอร์ม HTML จะแสดงค่าองค์ประกอบของไฟล์ XML ไฟล์นี้รับผิดชอบการแปลงเอกสาร XML ฝั่งเซิร์ฟเวอร์เพื่อให้สามารถแสดงบนเบราว์เซอร์ต่างๆ
ต่อไปนี้เป็นโปรแกรมหลักซึ่งใช้ฟังก์ชันการเปิดและอัปเดตเอกสาร XML และตัดสินใจว่าจะอัปเดตโดยขึ้นอยู่กับว่าส่งแบบฟอร์มหรือไม่ ประกอบด้วยสองฟังก์ชัน คือ loadXMLFile มีหน้าที่ในการโหลดและแปลงไฟล์ XML ที่จะแสดง ส่วนฟังก์ชัน updateXML มีหน้าที่ในการอัพเดตไฟล์ XML
โปรแกรม Edituserdata.asp เป็นดังนี้:
-
''------------------------------------------------'' ----------
''กำหนดฟังก์ชัน loadXMLFile() ซึ่งรับพารามิเตอร์สองตัว:
''strXMLFile - เส้นทางและชื่อไฟล์ของไฟล์ XML
''strXSLFilee - เส้นทางและชื่อไฟล์ของไฟล์ XSL
''www.knowsky.com
''------------------------------------------------'' ----------
ฟังก์ชัน loadXMLFile(strXMLFile, strXSLFile)
''ประกาศตัวแปรท้องถิ่น
หรี่แสง objXML
หรี่แสง objXSL
''สร้างอินสแตนซ์วัตถุ XMLDOM เพื่อโหลดไฟล์ XML
ตั้ง objXML = Server.CreateObject("Microsoft.XMLDOM")
''ปิดโหมดการโหลดไฟล์แบบอะซิงโครนัส
objXML.async = เท็จ
''โหลดไฟล์ XML!
objXML.load(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 ถึง Request.Form.Count
''ตรวจสอบว่าข้อมูลที่ส่งมีปุ่มหรือไม่ หากเป็นเช่นนั้น ให้ละเว้นข้อมูลนี้
ถ้า instr(1,Request.Form.Key(x),"btn") = 0 จากนั้น
''ตามโหมดแบบสอบถาม XSL ให้สร้างตัวแปร objField และแมปองค์ประกอบของแบบฟอร์มกับองค์ประกอบที่เกี่ยวข้อง [field_value] ในเอกสาร XML
ตั้งค่า objField = objRoot.selectSingleNode("field[@id=''" & Request.Form.Key(x) & "'']/field_value")
'' สอดคล้องกับข้อมูลที่ส่งโดยแบบฟอร์มกับค่าโหนดในเอกสาร XML
objField.Text = คำขอแบบฟอร์ม (x)
สิ้นสุดถ้า
ต่อไป
''บันทึกไฟล์ XML ที่แก้ไข
objDom.save strXMLFile
'' ปล่อยการอ้างอิงทั้งหมดไปยังวัตถุ
ตั้ง objDom = ไม่มีเลย
ตั้งค่า objRoot = ไม่มีเลย
ตั้งค่า objField = ไม่มีเลย
'' เรียกใช้ฟังก์ชัน loadXMLFile เพื่อแสดงไฟล์ XML ที่แก้ไขใหม่ไปยังไคลเอนต์โดยใช้สไตล์ชีตที่อัพเดต userdata.xsl
loadXMLFile strXMLFile,server.MapPath("updateduserdata.xsl")
ฟังก์ชันสิ้นสุด
''ตรวจสอบว่าส่งแบบฟอร์มสำเร็จหรือไม่ หากส่งแล้ว ให้อัปเดตไฟล์ XML;
ถ้า Request.Form("btnSubmit") = "" จากนั้น
loadXMLFile server.MapPath("userdata.xml"),server.MapPath("userdata.xsl")
อื่น
เซิร์ฟเวอร์ updateXML.MapPath("userdata.xml")
สิ้นสุดถ้า
-
เมื่อส่งแบบฟอร์มสำเร็จ เราจะใช้ updateduserdata.xsl เพื่อแสดงข้อมูลที่เราเพิ่งแก้ไข
addeduserdata.xsl เป็นดังนี้:
<?xml version="1.0" encoding="gb2312" ?>
<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="โปรไฟล์ผู้ใช้/ฟิลด์">
<tr>
<td>
<xsl:value-of select="@id" />
</td>
<td>
<xsl:value-of select="field_value" />
</td>
</tr>
</xsl:สำหรับแต่ละ>
</ตาราง>
<แบบฟอร์ม>
<input type="button" value="Return" onclick="history.go(-1)" />
</แบบฟอร์ม>
</ร่างกาย>
</html>
</xsl:แม่แบบ>
</xsl:สไตล์ชีท>
ข้างต้นเป็นเพียงตัวอย่างง่ายๆ ของแอปพลิเคชันข้ามแพลตฟอร์ม XML เราสามารถเขียนโปรแกรมที่มีประสิทธิภาพมากขึ้นเพื่อทำงานที่ซับซ้อนยิ่งขึ้นได้ตามความต้องการเฉพาะ โปรแกรมทั้งหมดได้รับการดีบั๊กและส่งผ่านในสภาพแวดล้อม WIN98SE+PWS+IE5.5+Netscape 4.75+Netscape 6+MSXML3.DLL