Xpath jarang digunakan oleh kami sekarang karena JSON sangat populer sekarang. Namun, di era ketika XML adalah format pertukaran data, XPath memainkan posisi yang sangat penting ketika kami secara acak mengakses struktur dokumen XML besar. Mungkin banyak orang tidak memperhatikan bahwa antarmuka yang ditentukan oleh DOM Level 3 XPath telah diimplementasikan oleh Firefox, Safari, Chrome, dan Opera. Antarmuka inti yang mereka terapkan adalah Xpathevaluator, yang berisi beberapa metode yang dapat bekerja dengan ekspresi XPath. Metode yang paling penting adalah evaluasi (), yang dapat menerima lima parameter 1.xpath string query 2. Menunjukkan node mana string kueri xPath harus dimulai dari 3. Parser namespace (diperkenalkan nanti) 4. Hasil yang dikembalikan Tipe 5. Hasil yang dikembalikan harus ditambahkan ke objek itu (Selanjutnya digunakan, karena hasilnya sebagian besar dikembalikan melalui evaluate ()).
Terutama ada 10 jenis pengembalian yang berbeda. Masing -masing mewakili konstanta objek XPathResult.
Setelah begitu banyak diperkenalkan, bagaimana kita harus menggunakan API ini untuk beroperasi?
Informasi yang dikembalikan oleh fungsi evaluasi () sepenuhnya tergantung pada jenis hasil yang diminta.
Untuk menjalankan kueri XPath, Anda perlu menggunakan objek XPathevaluator. Anda dapat menghasilkan objek baru atau menggunakan objek bawaan. Jika Anda menghasilkan objek baru, Anda perlu menginisialisasi XPathevaluator.
var evaluator = xpathevaluator baru (); // Dapatkan hasil div var pertama = evaluator.evaluate ("// div", document.documentelement, null, xpathresult.first_ordered_node_type, null); alert ("ID Div Pertama adalah" + result.singlenodevalue.id);Di Firefox, Safari, Chrome, dan Opera, semua contoh dokumen mengimplementasikan antarmuka XPathevaluator. Dengan cara ini, jika kueri dieksekusi di halaman HTML, kita dapat menggunakan Document.evaluate (). Jika dokumen XML diperoleh melalui XMLHTTPREQUEST atau mekanisme lainnya, metode evaluasi () juga dapat digunakan, misalnya:
// Dapatkan Hasil Div Var First = Document.evaluate ("// Div", Document.DocumentElement, null, xpathresult.first_ordered_node_type, null); alert ("ID Div Pertama adalah" + result.singlenodevalue.id);Berikut ini adalah dua cara untuk mengembalikan beberapa node, mari kita lihat contoh terlebih dahulu:
// Dapatkan semua div - gaya iterator var result = document.evaluate ("// div", document.documentElement, null, xpathresult.ordered_node_iterator_type, null); if (result) {var node = result.iterateNext (); while (node) {alert (node.id); node = node.iterateNext (); }} // Dapatkan semua div - gaya snapshot var result = document.evaluate ("// div", document.documentelement, null, xpathresult.ordered_node_snapshot_type, null); if (result) {for (var i = 0, len = result.snapshotlength; i <len; i ++) {alert (result.snapshotitem (i) .id); }}Namespace
Jika Anda hanya menggunakan XPath untuk meminta dalam dokumen HTML, parameter Parser Namespace di Evaluate () umumnya nol. Jika Anda cenderung menggunakan XPath untuk menanyakan dalam dokumen XML yang berisi namespace, maka Anda harus belajar cara membuat dan menggunakan parser namespace.
Selain namespace default, setiap namespace URI dipetakan ke awalan yang ditentukan. Setiap resolver namespace digunakan untuk memetakan awalan namespace dan namespace uri untuk mesin xpath. Ada dua cara untuk menghasilkan resolver namespace. Yang pertama adalah sebagai berikut: Buat metode yang menerima awalan namespace sebagai parameter, dan kemudian mengembalikan URL yang sesuai, sebagai berikut:
function resolver (prefix) {switch (prefix) {case "wrox": return "http://www.wrox.com/"; kasus "ncz": return "http://www.nczonline.net/"; default: return "http://www.yahoo.com/"; }}Tipe kedua menggunakan node yang berisi informasi namespace untuk menghasilkan resolver namespace.
<Buku xmlns: WROX = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <Wrox: Book> Profesional Javascript </book> </book>
Elemen <Books> berisi semua informasi namespace. Anda dapat meneruskan referensi ke node ini ke metode CreateSResovler () dari objek XPathevaluator, dan kemudian Anda dapat secara otomatis mendapatkan resolver namespace.
menyukai:
var evaluator = xpathevaluator baru (); var resolver = evaluator.createensResolver (xmldoc.documentElement);
Dengan menggunakan salah satu metode di atas, mudah untuk menanyakan dalam dokumen XML yang berisi namespace.
var evaluator = xpathevaluator baru (); var resolver = evaluator.createensResolver (xmldoc.documentElement); var result = evaluator.evaluate ("Wrox: Book", xmldoc.documentElement, resolver, xpathresult.first_ordered_node_type, null); if (result) {alert (result.singlenodevalue.firstchild.nodevalue); }Catatan: Jika Anda menjalankan kueri dalam dokumen XML yang berisi namespace dan tidak memberikan parser namespace, kesalahan akan terjadi.
Dukungan untuk XPath di IE Browser
IE8 belum mengimplementasikan antarmuka yang didefinisikan dalam DOM Level 3 XPath, tetapi juga memiliki dukungan tertentu untuk XPath. Fungsi XPath di IE terutama tersedia untuk dokumen XML dan tidak tersedia untuk objek dokumen.
Cara Menghasilkan Dokumen XML di IE:
fungsi createDocument () {if (typeof argument.callee.activexString! = "string") {var versi = ["msxml2.domdocument.6.0", "msxml2.domdocument.3.0", "msxml2.domdocument"]; untuk (var i = 0, len = versi. argumen.callee.activexString = versi [i]; mengembalikan xmldom; } catch (ex) {// lewati}}} return new ActivexObject (arguments.callee.activexString); }Setelah menghasilkan objek dokumen, Anda dapat menggunakan metode LoadXml () untuk memuat konten:
var xmldoc = createDocument (); xmldoc.loadxml ("");Metode kedua menghasilkan objek XML melalui objek XMLHTtrequest.
var xhr = xmlhttpRequest baru (), xmldoc; xhr.open ("get", "data.xml", true); xhr.onreadystatechange = function () {if (xhr.readystate == 4) {if (xhr.status> = 200 && xhr.status <300) {xmldoc = xhr.responsexml; }}; xhr.send (null);Metode ketiga adalah menggunakan tag <xml>. Microsoft menyebut metode ini Metode XML Data Island, sebagai berikut:
<xml id = "myxml" src = "data.xml"> </xml>
Kemudian:
var xmldoc = document.getElementById ("myxml"). xmldocument;Dukungan XPath:
Ada dua metode bawaan untuk mendukung XPATH di objek dokumen XML di IE:
SelectsingLenode () dan SelectNodes (), setiap metode menerima ekspresi XPath sebagai parameter, dan kemudian mengembalikan node pencocokan pertama dan semua node yang cocok masing -masing.
Dukungan namespace:
untuk
<Buku XMLNS: WROX = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <Wrox: Book> Profesional Javascript </book>
</books> Untuk dokumen XML ini, kita harus menggunakan metode berikut untuk meminta, yaitu, pertama -tama gunakan setProperty () untuk mengatur namespace dari dokumen XML.
xmldoc.setProperty ("selectionNamespaces", "xmlns: wrox = 'http: //www.wrox.com/' xmlns = 'http: //www.amazon.com/'"); var book = xmldoc.documentelement.selectlenlenode ("); book = xmldoc.document.