نادراً ما يتم استخدام XPath الآن لأن JSON تحظى بشعبية كبيرة الآن. ومع ذلك ، في العصر الذي كان فيه XML تنسيقًا لتبادل البيانات ، لعبت XPath موضعًا مهمًا للغاية عندما وصلنا بشكل عشوائي إلى هياكل وثيقة XML الكبيرة. ربما لم يلاحظ الكثير من الناس أن الواجهة المحددة بواسطة DOM Level 3 XPath قد تم تنفيذها بواسطة Firefox و Safari و Chrome و Opera. الواجهة الأساسية التي ينفذونها هي XPathevAluator ، والتي تحتوي على بعض الطرق التي يمكن أن تعمل مع تعبيرات XPath. الطريقة الأكثر أهمية هي التقييم () ، والتي يمكن أن تقبل خمسة معلمات 1.xpath Query String 2. تشير إلى العقدة التي يجب أن تبدأ سلسلة استعلام XPath من 3. محلل مساحة الاسم (تم تقديمه لاحقًا) 4. النتيجة التي تم إرجاعها 5. يجب إضافة النتيجة التي تم إرجاعها إلى هذا الكائن (نادراً ما يتم استخدامه ، لأن النتيجة يتم إرجاعها بشكل رئيسي من خلال التقييم ()).
هناك بشكل رئيسي 10 أنواع عودة مختلفة. يمثل كل منها ثابتًا لكائن XPathresult.
بعد الكثير من المقدمة ، كيف يجب أن نستخدم واجهات برمجة التطبيقات هذه للعمل؟
تعتمد المعلومات التي يتم إرجاعها بواسطة دالة التقييم () بالكامل على نوع النتيجة المطلوبة.
من أجل تنفيذ استعلام XPath ، تحتاج إلى استخدام كائن Xpathevaluator. يمكنك إنشاء كائن جديد أو استخدام الكائن المدمج. إذا قمت بإنشاء كائن جديد ، فأنت بحاجة إلى تهيئة Xpathevaluator.
var evaluator = new xPathevaluator () ؛ // احصل على النتيجة الأولى div var = evaluator.evaluate ("// div" ، document.documentElement ، null ، xPathresult.first_ordered_node_type ، null) ؛ ALERT ("First Div Is" + result.singlenodevalue.id) ؛في Firefox و Safari و Chrome و Opera ، تنفذ جميع مثيلات المستندات واجهة Xpathevaluator. وبهذه الطريقة ، إذا تم تنفيذ استعلام في صفحة HTML ، فيمكننا استخدام المستند. إذا تم الحصول على مستند XML من خلال XMLHTTPrequest أو آليات أخرى ، فيمكن أيضًا استخدام طريقة التقييم () ، على سبيل المثال:
// GET First div var result = document.evaltuer ("// div" ، document.documentElement ، null ، xPathresult.first_ordered_node_type ، null) ؛ ALERT ("First Div Is" + result.singlenodevalue.id) ؛فيما يلي طريقتان لإعادة عقد متعددة ، دعونا نلقي نظرة على الأمثلة أولاً:
// الحصول على جميع divs - iterator style var result = document.evaluate ("// div" ، document.documentElement ، null ، xPathresult.ordered_node_iterator_type ، null) ؛ if (النتيجة) {var node = result.iteratenext () ؛ بينما (العقدة) {Alert (node.id) ؛ العقدة = node.iteratenext () ؛ }} // الحصول على جميع divs - snapshot style 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) ؛ }}مساحة الاسم
إذا كنت تستخدم XPath فقط للاستعلام في مستندات HTML ، فإن معلمة محلل المساحة في التقييم () لاغية بشكل عام. إذا كنت تميل إلى استخدام XPath للاستعلام في مستندات XML التي تحتوي على مساحة الاسم ، فعليك تعلم كيفية إنشاء واستخدام محلل المساحة.
بالإضافة إلى مساحة الاسم الافتراضية ، يتم تعيين كل مساحة اسم URI إلى بادئة محددة. يتم استخدام كل حل لوجود مساحة الاسم لرسم تعيين بادئة مساحة الاسم ومساحة الاسم URI لمحرك XPath. هناك طريقتان لإنشاء حل لوجيها. الأول هو كما يلي: إنشاء طريقة تقبل بادئة مساحة الاسم كمعلمة ، ثم إرجاع عنوان URL المقابل ، على النحو التالي:
دالة Resolver (بادئة) {switch (prefix) {case "wrox": return "http://www.wrox.com/" ؛ حالة "NCZ": العودة "http://www.nczonline.net/" ؛ الافتراضي: إرجاع "http://www.yahoo.com/" ؛ }}يستخدم النوع الثاني عقدة تحتوي على معلومات مساحة الاسم لإنشاء محلل مساحة الاسم.
<books xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"
يحتوي العنصر <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 (result) {Alert (result.singlenodevalue.firstchild.nodevalue) ؛ }ملاحظة: إذا قمت بتنفيذ استعلام في مستند XML يحتوي على مساحة اسم ولم تقدم محللًا مساحة الاسم ، فسيحدث خطأ.
دعم XPath في متصفح IE
لم تنفذ IE8 الواجهة المحددة بعد في DOM Level 3 XPath ، ولكن لديها أيضًا دعم معين لـ XPath. تتوفر وظيفة XPath في IE بشكل أساسي لمستندات XML وليست متوفرة لكائنات المستند.
كيفية إنشاء مستندات XML في IE:
الوظيفة التي تم إنشاؤها createdOcument () {if (typeof enduces.callee.activexString! = "string") {var repions = ["msxml2.domdocument.6.0" ، "msxml2.domdocument.3.0" ، "msxml2.domdocument"] ؛ لـ (var i = 0 ، len = fesions.length ؛ i <len ؛ i ++) {try {var xmldom = new ActivexObject (إصدارات [i]) ؛ encuments.callee.activexString = إصدارات [i] ؛ إرجاع xmldom ؛ } catch (ex) {// skip}}} إرجاع ActiveXObject الجديد (encomes.callee.activexString) ؛ }بعد إنشاء كائن المستند ، يمكنك استخدام طريقة LOADXML () لتحميل المحتوى:
var xmldoc = createCument () ؛ XMLDOC.LOADXML ("") ؛تقوم الطريقة الثانية بإنشاء كائن XML من خلال كائن XMLHTTrequest.
var xhr = new xmlhttprequest () ، xmldoc ؛ XHR.Open ("get" ، "data.xml" ، true) ؛ XHR.OnReadyStateChange = function () {if (xhr.readyState == 4) {if (xhr.status> = 200 && xhr.status <300) {xmldoc = xhr.sponsexml ؛ }} ؛ 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 كمعلمة ، ثم تعيد عقدة المطابقة الأولى وجميع العقد المطابقة على التوالي.
دعم مساحة الاسم:
ل
<books xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"
</books> بالنسبة لمستند XML هذا ، يجب أن نستخدم الطريقة التالية للاستعلام ، أي أولاً استخدم SetProperty () لتعيين مساحة اسم مستند XML.
XMLDOC.SetProperty ("SelectionNamesPaces" ، "Xmlns: Wrox = 'http: //www.wrox.com/' xmlns = 'http: //www.amazon.com/'")