هل يمكن استخدام XPath لإرجاع مساحات الأسماء على العقد؟

هل يمكن استخدام XPath (1.0) لإرجاع عقد مساحة الاسم في مستند XML؟

ملاحظة: أنا لا أطلب العقد التي لها مساحة اسم معينة ، ولكن تقوم مساحة الاسم بنفسها. اذن لا:

//node()[namespace-uri()='http://a.b']
0

2 إجابة

إذا تم تنفيذ محور مساحة الاسم (يرفض Firefox/Mozilla القيام بذلك) ، فإن //namespace :: node() تمنحك جميع نقاط مساحة الاسم. ولكن لاحظ أن نقاط مساحة الاسم في نموذج بيانات XSLT/XPath تختلف عن سمات تعريف مساحة الاسم في وثيقة xml ، مع الترميز


  
    baz
  

تحتوي كل العناصر الثلاثة على اثنين في نطاق مساحة اسم النطاق ، والعنوان الافتراضي المعلن على عنصر الجذر والواحد المضمنة لمساحة الاسم xml .

3
وأضاف

يوجد محور namespace :: في XPath 1.0 ، لذلك يمكنك. في 2.0 هو موقوف ويعمل فقط في وضع التوافق. ومع ذلك ، يمكنك الاستعلام عن كل روابط/بادئات مساحة الاسم في النطاق.

من المستحسن عادة الاعتماد على عقد مساحة الاسم الفعلية ، على الرغم من أنه في بعض الأحيان لا يمكن تجنبه. لاحظ أن محور namespace :: يحتوي على كافة نطاقات مساحة الاسم الموجودة في نطاق ذلك العنصر. للعثور على تلك التي تم ربطها بهذا العنصر المحدد ، يجب عليك مقارنة قائمة العقدة بمساحات الأسماء في النطاق الخاص بالعنصر الرئيسي.

1
وأضاف
لاحظ أنه تم وضع علامة على محور مساحة الاسم بوضوح كموقف في XPath 2.0. قم بالتمرير لأسفل من هذا الفصل w3.org/TR/xpath20/#axes إلى قائمة المحور ، آخرها هي مساحة الاسم وإذا كنت تقرأ أن الفقرة تقول تم إيقاف محور مساحة الاسم في XPath 2.0. ولم يكن هناك حاجة لتطبيقه حتى إذا كان "متوافق مع الإصدارات السابقة".
وأضاف المؤلف Alexis Wilke, مصدر
هل تعرف لماذا تم إهمالها؟
وأضاف المؤلف peter.murray.rust, مصدر
تم إيقاف محور مساحة الاسم في XPath 2.0 بسبب التأثير السائد لأشخاص XQuery الذين لم يروا الحاجة إليه. لم يتم إهماله في XSLT 2.0: بل هو "ميزة اختيارية". التعريف الخاص بميزة اختيارية هو ميزة ستجدها في التطبيق الجيد ، ولن تجدها في حالة سيئة.
وأضاف المؤلف Michael Kay, مصدر
تعليق آخر: المعلومات المتوفرة عبر محور مساحة الاسم متوفرة أيضًا (أحيانًا أقل ملاءمة ، ولكن ربما أكثر كفاءة) عبر وظائف XPath 2.0 في البادئات() و namespace-uri-for-prefix (). أعتقد أن أحد الأسباب الرئيسية وراء رغبة بعض المنفذين في استبعاد محور مساحة الاسم هو أنهم أرادوا تشجيع المستخدمين على استخدام هذه الوظائف بدلاً من ذلك ، حيث يسهل تنفيذها بشكل فعال.
وأضاف المؤلف Michael Kay, مصدر
@ peter.murray.rust يمكنني تخمين فقط ولكن أعتقد أنه لأنه فكرة هشة للغاية. أولاً ، يجب أن تكون روابط مساحة الاسم شفافة بالفعل على مستوى XSLT. والأسوأ من ذلك ، يتم استنساخ ربط مساحة اسم واحدة كعقبة جديدة لمساحة الاسم لكل سليل للعنصر الذي يظهر فيه. قد يكون هذا مربكًا تمامًا.
وأضاف المؤلف biziclop, مصدر
MichaelKay شكرا لإضافة بعض المعلومات الأساسية عن تاريخ ذلك. ولكن هناك تناقض حقيقي بين عُقد مساحة الأسماء وبين جميع الآخرين ، وأكبرها أنه لا يوجد علاقة فردية مع ما يوجد في ملف xml نفسه.
وأضاف المؤلف biziclop, مصدر