ตอนนี้ XPath นั้นไม่ค่อยได้ใช้เพราะ JSON เป็นที่นิยมมากในตอนนี้ อย่างไรก็ตามในยุคที่ XML เป็นรูปแบบการแลกเปลี่ยนข้อมูล XPath เล่นตำแหน่งที่สำคัญมากเมื่อเราเข้าถึงโครงสร้างเอกสาร XML ขนาดใหญ่แบบสุ่ม บางทีหลายคนไม่ได้สังเกตว่าอินเทอร์เฟซที่ระบุโดย DOM ระดับ 3 XPath ได้ถูกนำไปใช้โดย Firefox, Safari, Chrome และ Opera อินเทอร์เฟซหลักที่พวกเขาใช้คือ XPathEvaluator ซึ่งมีวิธีการบางอย่างที่สามารถทำงานกับนิพจน์ XPath ได้ วิธีที่สำคัญที่สุดคือการประเมิน () ซึ่งสามารถยอมรับพารามิเตอร์ห้าตัว 1.xPath String String 2. ระบุว่าโหนดใดสตริงการสืบค้น XPATH ควรเริ่มต้นจาก 3. namespace parser (แนะนำในภายหลัง) 4. ผลลัพธ์ที่ส่งคืน 5. ผลลัพธ์ที่ส่งคืนควรเพิ่มลงในวัตถุนั้น
ส่วนใหญ่มี 10 ประเภทผลตอบแทนที่แตกต่างกัน แต่ละรายการแสดงถึงค่าคงที่ของวัตถุ XPathResult
หลังจากการแนะนำมากมายเราควรใช้ API เหล่านี้เพื่อใช้งานได้อย่างไร?
ข้อมูลที่ส่งคืนโดยฟังก์ชั่นการประเมิน () ขึ้นอยู่กับประเภทผลลัพธ์ที่ร้องขอทั้งหมด
ในการดำเนินการค้นหา XPATH คุณต้องใช้วัตถุ XPathEvaluator คุณสามารถสร้างวัตถุใหม่หรือใช้วัตถุในตัว หากคุณสร้างวัตถุใหม่คุณจะต้องเริ่มต้น XPathEvaluator
var evaluator = new XPathEvaluator (); // รับผล div var แรก = evaluator.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); การแจ้งเตือน ("First Div ID คือ" + result.singlenodevalue.id);ใน Firefox, Safari, Chrome และ Opera อินสแตนซ์เอกสารทั้งหมดใช้อินเทอร์เฟซ XPathEvaluator ด้วยวิธีนี้หากมีการสืบค้นในหน้า HTML เราสามารถใช้ document.evaluate () หากเอกสาร XML ได้รับผ่าน XMLHTTTPREQUEST หรือกลไกอื่น ๆ สามารถใช้วิธีการประเมิน () เช่น: ตัวอย่างเช่น:
// รับ First div var result = document.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); การแจ้งเตือน ("First Div ID คือ" + result.singlenodevalue.id);ต่อไปนี้มีสองวิธีในการส่งคืนหลายโหนดลองดูตัวอย่างก่อน:
// รับ divs ทั้งหมด - iterator style results = document.evaluate ("// div", documentEnumentElement, null, xpathResult.ordered_node_iterator_type, null); if (ผลลัพธ์) {var node = result.iteratenext (); ในขณะที่ (โหนด) {แจ้งเตือน (node.id); node = node.iteratenext (); }} // รับ Divs ทั้งหมด - Snapshot Style Var result = document.evaluate ("// div", document.documentelement, null, xpathresult.ordered_node_snapshot_type, null); if (ผลลัพธ์) {สำหรับ (var i = 0, len = result.snapshotlength; i <len; i ++) {alert (result.snapshotitem (i) .id); -เนมสเปซ
หากคุณเพิ่งใช้ XPATH เพื่อสอบถามในเอกสาร HTML พารามิเตอร์ตัวแยกวิเคราะห์เนมสเปซในการประเมิน () โดยทั่วไปจะเป็นโมฆะ หากคุณมักจะใช้ XPATH เพื่อสอบถามในเอกสาร XML ที่มีเนมสเปซคุณควรเรียนรู้วิธีการสร้างและใช้ตัวแยกวิเคราะห์เนมสเปซ
นอกเหนือจากเนมสเปซเริ่มต้นแล้วแต่ละเนมสเปซ URI จะถูกแมปกับคำนำหน้าที่ระบุ ตัวแก้ไขเนมสเปซแต่ละตัวใช้เพื่อแมปคำนำหน้าเนมสเปซและเนมสเปซ URI สำหรับเอ็นจิ้น XPath มีสองวิธีในการสร้างตัวแก้ไขเนมสเปซ สิ่งแรกคือดังนี้: สร้างวิธีที่ยอมรับคำนำหน้าเนมสเปซเป็นพารามิเตอร์จากนั้นส่งคืน URL ที่เกี่ยวข้องดังนี้:
ฟังก์ชั่นตัวแก้ไข (คำนำหน้า) {สวิตช์ (คำนำหน้า) {กรณี "wrox": return "http://www.wrox.com/"; กรณี "ncz": return "http://www.nczonline.net/"; ค่าเริ่มต้น: ส่งคืน "http://www.yahoo.com/"; -ประเภทที่สองใช้โหนดที่มีข้อมูลเนมสเปซเพื่อสร้างตัวแก้ไขเนมสเปซ
<หนังสือ xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: หนังสือ> JavaScript มืออาชีพ </book> </books>
องค์ประกอบ <books> ประกอบด้วยข้อมูลเนมสเปซทั้งหมด คุณสามารถส่งผ่านการอ้างอิงไปยังโหนดนี้ไปยังวิธี createnSresovler () ของวัตถุ XPathEvaluator จากนั้นคุณสามารถรับตัวแก้ไขเนมสเปซโดยอัตโนมัติ
ชอบ:
var evaluator = new XPathEvaluator (); var resolver = evaluator.creatensResolver (xmldoc.documentelement);
การใช้วิธีการใด ๆ ข้างต้นมันเป็นเรื่องง่ายที่จะสืบค้นในเอกสาร XML ที่มีเนมสเปซ
var evaluator = new XPathEvaluator (); var resolver = evaluator.creatensResolver (xmldoc.documentelement); var result = evaluator.evaluate ("wrox: book", xmldoc.documentelement, resolver, xpathresult.first_ordered_node_type, null); if (ผลลัพธ์) {Alert (result.singlenodevalue.firstchild.nodevalue); -หมายเหตุ: หากคุณดำเนินการสืบค้นในเอกสาร XML ที่มีเนมสเปซและไม่ได้ให้ตัวแยกวิเคราะห์เนมสเปซข้อผิดพลาดจะเกิดขึ้น
สนับสนุน XPath ในเบราว์เซอร์ IE
IE8 ยังไม่ได้ใช้งานอินเทอร์เฟซที่กำหนดไว้ใน DOM ระดับ 3 XPATH แต่ก็มีการสนับสนุน XPATH บางอย่าง ฟังก์ชั่น XPATH ใน IE ส่วนใหญ่มีให้สำหรับเอกสาร XML และไม่สามารถใช้งานได้สำหรับวัตถุเอกสาร
วิธีสร้างเอกสาร XML ใน IE:
ฟังก์ชั่น createDocument () {ถ้า (typeof arguments.callee.activexstring! = "string") {var version = ["msxml2.domdocument.6.0", "msxml2.domdocument.3.0", "msxml2.domDocument"]; สำหรับ (var i = 0, len = versions.length; i <len; i ++) {ลอง {var xmldom = new ActiveXObject (เวอร์ชัน [i]); อาร์กิวเมนต์ callee.activexstring = เวอร์ชัน [i]; กลับ xmldom; } catch (ex) {// skip}}} ส่งคืน ActiveXObject ใหม่ (arguments.callee.activexstring); -หลังจากสร้างวัตถุเอกสารแล้วคุณสามารถใช้เมธอด LoadXML () เพื่อโหลดเนื้อหา:
var xmldoc = createDocument (); xmldoc.loadxml ("");วิธีที่สองสร้างวัตถุ XML ผ่านวัตถุ XMLHTTREQUEST
var xhr = ใหม่ xmlhttprequest (), xmldoc; xhr.open ("รับ", "data.xml", จริง); xhr.onreadyStateChange = function () {if (xhr.readystate == 4) {ถ้า (xhr.status> = 200 && xhr.status <300) {xmldoc = xhr.responsexml; - XHR.Send (NULL);วิธีที่สามคือการใช้แท็ก <xml> Microsoft เรียกวิธีนี้ว่า XML Data Island ดังนี้:
<xml id = "myxml" src = "data.xml"> </xml>
แล้ว:
var xmldoc = document.getElementById ("myxml"). xmldocument;การสนับสนุน XPATH:
มีสองวิธีในตัวสำหรับรองรับ XPATH ในวัตถุเอกสาร XML ใน IE:
SelectSingLenode () และ SelectNodes () แต่ละวิธียอมรับนิพจน์ XPATH เป็นพารามิเตอร์จากนั้นนำโหนดที่ตรงกันครั้งแรกกลับมาและโหนดที่ตรงกันทั้งหมดตามลำดับ
การสนับสนุนเนมสเปซ:
สำหรับ
<หนังสือ xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: หนังสือ> JavaScript มืออาชีพ </book>
</books> สำหรับเอกสาร XML นี้เราควรใช้วิธีการสอบถามต่อไปนี้นั่นคือให้ใช้ setProperty () ก่อนเพื่อตั้งค่าเนมสเปซของเอกสาร XML
XMLDOC.SetProperty ("SelectionNamespaces", "XMLNS: WROX = 'http: //www.wrox.com/' xmlns = 'http: //www.amazon.com/'");