บทความนี้จะแนะนำข้อควรระวังเป็นหลักเมื่อใช้ MSXML2.DOMDocument เพื่อประมวลผลข้อมูล XML ใน asp บทความนี้ให้ 4 ประเด็นที่ต้องการความสนใจ สามารถอ้างอิงถึงสิ่งต่อไปนี้
เมื่อ asp ใช้ MSXML2.DOMDocument เพื่อโหลดไฟล์ xml บนเครือข่าย คุณจะต้องใส่ใจกับการตั้งค่าก่อนที่จะเรียกใช้เมธอด load:
คัดลอกรหัสรหัสดังต่อไปนี้:oXML.setProperty ServerHTTPRequest จริง
นั่นคือ หากเปิดใช้งานคำขอ ServerHTTPRequest ระบบจะไม่เกิดข้อผิดพลาด: -2146697209
เมื่อใช้คอมโพเนนต์ MSXML2.DOMDocument ใน asp คุณต้องใส่ใจกับ 4 สถานการณ์ต่อไปนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:-
Dim oXML, oXMLError, ReturnValue, x
ตั้งค่า oXML = Server.CreateObject(MSXML2.DOMDocument)
' ตั้งค่าให้ DOMDocument โหลดไฟล์ xml แบบอะซิงโครนัสหรือซิงโครนัส
oXML.async = false'==========A
' วัตถุประสงค์การตั้งค่า: จริง/เท็จ ระบุว่าจะใช้ส่วนประกอบ ServerXMLHTTP ที่ปลอดภัยของเซิร์ฟเวอร์เพื่อโหลดเอกสาร xml หรือไม่
oXML.setProperty ServerHTTPRequest จริง'==========B
'โหลดไฟล์ xml เครือข่ายผ่าน HTTP
ReturnValue = oXML.Load(http://localhost/asp/ServerXML.xml)'==========C
'หรือโหลดไฟล์ xml ในเครื่องของเซิร์ฟเวอร์
'ค่าส่งคืน = oXML.Load(d:/test.xml)'==========D
' พิมพ์ค่าที่ส่งคืนของ DOMDocument.load:
Response.write ผลลัพธ์ของวิธีการโหลดคือ = & ReturnValue & <br>
-
กรณีแรก (กำลังโหลดเอกสารเปล่า):
ตามค่าเริ่มต้น แอตทริบิวต์ async ของวัตถุ DOMDocument จะเป็น TRUE ซึ่งหมายความว่ามีการโหลดแบบอะซิงโครนัส และคอมโพเนนต์ ServerXMLHTTP จะไม่ถูกใช้เมื่อโหลด นั่นคือแสดงความคิดเห็นในบรรทัด A และ B ในโค้ดด้านบน
คัดลอกรหัสรหัสดังต่อไปนี้:'oXML.async = false'==========A
'oXML.setProperty ServerHTTPRequest จริง'==========B
ในเวลานี้การโหลดจะสำเร็จ ReturnValue จะเป็น TRUE แต่เอกสาร XML ที่โหลดลงใน DOMDocument นั้นว่างเปล่า! กล่าวอีกนัยหนึ่ง TRUE ที่ส่งคืนโดยวิธีการโหลดคือค่าปก! ผลลัพธ์จะเป็นดังนี้: โปรแกรมเมอร์ต้องระวังในกรณีนี้! แม้ว่า XML จะไม่รายงานข้อผิดพลาดใดๆ และวิธีการโหลดก็บ่งชี้ถึงความสำเร็จด้วย แต่แอตทริบิวต์ xml ของ DOM นั้นว่างเปล่า
กรณีที่สอง (เหตุผลข้อผิดพลาด: -2146697209):
หากคุณประกาศแอตทริบิวต์ async เป็น FALSE อย่างชัดเจน เอกสาร XML จะถูกโหลดพร้อมกัน และคอมโพเนนต์ ServerXMLHTTP จะไม่ถูกใช้เมื่อโหลด นั่นคือแสดงความคิดเห็นเฉพาะบรรทัด B ในโค้ดด้านบน
คัดลอกรหัสรหัสดังต่อไปนี้:oXML.async = false'==========A
'oXML.setProperty ServerHTTPRequest จริง'==========B
แล้วคุณจะพบกับความล้มเหลว! ReturnValue จะเป็นเท็จ สาเหตุของข้อผิดพลาดคือ: -2146697209 - ไม่มีข้อมูลสำหรับทรัพยากรที่ต้องการ กล่าวอีกนัยหนึ่งการโหลดทรัพยากร XML บนอินเทอร์เน็ตพร้อมกันจะไม่สำเร็จ! -
กรณีที่สาม (ไม่ได้รับอนุญาต):
หากแอตทริบิวต์ async ของคุณเป็น TRUE เอกสาร XML จะถูกโหลดแบบอะซิงโครนัส และใช้ส่วนประกอบ ServerXMLHTTP เมื่อโหลด นั่นคือเปิดใช้งานบรรทัด B ในโค้ดด้านบน แสดงความคิดเห็นในบรรทัด A ของโค้ด
คัดลอกรหัสรหัสดังต่อไปนี้:'oXML.async = false'==========A
oXML.setProperty ServerHTTPRequest จริง'==========B
รายงานข้อผิดพลาด! โปรดทราบว่าไม่อนุญาตให้ใช้ส่วนประกอบ SXH เพื่อโหลดเอกสาร XML แบบอะซิงโครนัส! คำอธิบายข้อผิดพลาดคือ: -1072897486 - คุณสมบัติ ServerHTTPRequest ไม่สามารถใช้เมื่อโหลดเอกสารแบบอะซิงโครนัส และได้รับการสนับสนุนบน Windows NT 4.0 ขึ้นไปเท่านั้น
กรณีที่สี่ (ใช้อย่างถูกต้อง):
หากคุณประกาศแอตทริบิวต์ async เป็น FALSE อย่างชัดเจน เอกสาร XML จะถูกโหลดพร้อมกัน และใช้ส่วนประกอบ ServerXMLHTTP เมื่อโหลด นั่นคือเปิดใช้งานบรรทัด A และ B ในโค้ดด้านบน
คัดลอกรหัสรหัสดังต่อไปนี้:oXML.async = false'==========A
oXML.setProperty ServerHTTPRequest จริง'==========B
แค่นั้นแหละ! มันแสดงให้เห็นว่าการใช้ส่วนประกอบ SXH เพื่อโหลดเอกสาร XML สามารถแก้ไขข้อผิดพลาดของการโหลดทรัพยากรอินเทอร์เน็ตแบบอะซิงโครนัส
สรุป
วิธีการโหลด | ไม่ว่าจะใช้งาน คอมโพเนนต์ ServerXMLHTTP | โหลดผลลัพธ์ |
| การโหลดแบบอะซิงโครนัส | ไม่ได้ใช้ | การโหลดจะสำเร็จ แต่เอกสาร XML ที่โหลดลงใน DOMDocument นั้นว่างเปล่า |
| โหลดแบบซิงโครนัส | ไม่ได้ใช้ | จะพบกับความล้มเหลว! สาเหตุของข้อผิดพลาดคือ: -2146697209 - ไม่มีข้อมูลสำหรับทรัพยากรที่ต้องการ |
| การโหลดแบบอะซิงโครนัส | ใช้ | ไม่ได้รับอนุญาต |
| โหลดแบบซิงโครนัส | ใช้ | ประสบความสำเร็จอย่างแท้จริง |