CodeKitHub
أدوات الأكواد

أداة اختبار XPath

آخر تحديث:

لغة XPath هي لغة استعلام لاختيار العُقد من مستند XML (أو HTML) باستخدام تعبيرات مسار، تمامًا كما يحدد مسار الملف ملفًا داخل شجرة مجلدات. تتيح لك هذه الأداة لصق أي XML، وكتابة تعبير XPath، ومشاهدة العُقد المطابقة فورًا — بما في ذلك عدد العُقد، والمخرجات المُسلسَلة، ورسائل خطأ واضحة عند وجود XML أو صياغة XPath غير صحيحة. تعمل بالكامل داخل متصفحك باستخدام محرك `document.evaluate` الأصلي المدمج في كل متصفح حديث، لذا لا يتم رفع أي شيء تلصقه إلى أي خادم.

ما هي هذه الأداة؟

لغة XPath (لغة مسار XML) هي معيار من W3C للتنقل واختيار العُقد — العناصر، والسمات، والنصوص — داخل مستند XML باستخدام صياغة مسار مختصرة، مثل `//book[price>30]/title` التي تختار كل عنصر `<title>` يكون العنصر الشقيق `<price>` الخاص به أكبر من 30، في أي مكان بالمستند. تُستخدم في أوراق أنماط XSLT، وأدوات التحقق من صحة XML، وأدوات كشط الويب، وأطر أتمتة المتصفح (Selenium، Playwright)، والعديد من مكتبات XML في لغات البرمجة.

الإصدار الحالي الذي تنفذه جميع المتصفحات الرئيسية — Chrome وFirefox وSafari وEdge — هو XPath 1.0، توصية W3C الأصلية الصادرة عام 1999. تستخدم هذه الأداة نفس المحرك الأصلي عبر واجهة برمجة `document.evaluate()` الخاصة بالمتصفح، لذا تتطابق النتائج هنا مع ما تحصل عليه من أدوات مطوري المتصفح أو أي جافاسكريبت يعمل في المتصفح. لا تنفذ الأداة مواصفات XPath 2.0/3.0/3.1 اللاحقة (التي تضيف وظائف مثل `for`، والتسلسلات، ومطابقة التعبيرات النمطية) — راجع الأسئلة الشائعة لمعرفة ما يعنيه ذلك عمليًا.

يمكن أن يُعيد التعبير أحد نوعين من النتائج: مجموعة عُقد (صفر أو أكثر من العناصر أو السمات أو عُقد النص المطابقة، والتي تُسلسلها هذه الأداة وتسردها سطرًا سطرًا مع عدد إجمالي)، أو قيمة عددية بسيطة — رقم أو نص أو قيمة منطقية — عندما يحسب التعبير نفسه قيمة، مثل `count(//book)` أو `//book[1]/title = 'Dune'`.

لماذا تستخدمها؟

  • تصحيح تعبير XPath قبل تضمينه مباشرة في أداة كشط ويب، أو اختبار Selenium/Playwright، أو ورقة أنماط XSLT.
  • التحقق سريعًا مما إذا كان تعبير XPath معين يختار العقدة المتوقعة من عينة XML/HTML حقيقية.
  • رؤية عدد المطابقات الدقيق والمخرجات المُسلسَلة بدلاً من التخمين من الكود.
  • الحصول على أخطاء فورية وواضحة لـ XML غير صحيح أو صياغة XPath غير صالحة بدلاً من رسالة خطأ غامضة.
  • يعمل بالكامل من جهة العميل: لا تغادر بيانات XML والتعبير متصفحك أبدًا.

كيفية الاستخدام

  1. الصق أو حرّر مستند XML (أو HTML) الخاص بك في مربع الإدخال — تم تعبئة مستند متجر كتب نموذجي مسبقًا لتراه يعمل فورًا.
  2. اكتب تعبير XPath في حقل التعبير، أو عدّل المثال المُعبأ مسبقًا.
  3. انقر على "تقييم" (أو اضغط Enter في حقل التعبير).
  4. اقرأ العُقد المطابقة أدناه، مع عدد إجمالي في الأعلى؛ تُعرض النتائج العددية البسيطة (أرقام، نصوص، قيم منطقية) مباشرة.
  5. إذا كان XML أو التعبير غير صحيح، تحل رسالة خطأ محددة محل النتائج.

مثال

الإدخال

XML:
<bookstore>
  <book><title>The Great Gatsby</title><price>12.99</price></book>
  <book><title>Learning XPath</title><price>34.50</price></book>
  <book><title>Dune</title><price>45.00</price></book>
</bookstore>

XPath: //book[price>30]/title

الناتج

✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>

كتابان فقط من أصل 3 لهما سعر أعلى من 30، لذا يتم إرجاع عنصرَي `<title>` بالضبط — الكتاب الثالث (Gatsby، بسعر 12.99$) مستبعد بشكل صحيح.

XPath مقابل محددات CSS بلمحة سريعة

تختار كلتا اللغتين عُقدًا من مستند، لكنهما تحلان مشكلتين مختلفتين. استخدم هذا الجدول لاختيار الأداة المناسبة لاختيار معين.

القدرةXPathمحددات CSS
الاختيار حسب الوسم/الفئة/المعرف نزولاًنعمنعم — وعادةً أسرع
الاختيار حسب المحتوى المرئي/النصينعم — `contains(text(),'x')`لا
التنقل صعودًا إلى أب/سلفنعم — `//div[span]/..`لا (`:has()` استثناء جزئي أحدث)
مقارنات قيم الأشقاء (مثل `price>30`)نعملا
يعمل خارج المتصفح (أدوات XML من جهة الخادم، XSLT)نعملا — محددات CSS خاصة بالمتصفح/DOM

أدوات ذات صلة

هل تعمل مع تنسيقات بيانات مهيكلة؟ تتكامل هذه الأدوات جيدًا مع اختبار XPath.

الأسئلة الشائعة

ما هو استخدام لغة XPath؟

تختار XPath العُقد — العناصر، أو السمات، أو النصوص — من مستند XML أو HTML باستخدام صياغة مسار. إنها لغة الاختيار خلف تحويلات XSLT، والعديد من أدوات التحقق من صحة XML، وتُستخدم على نطاق واسع في كشط الويب وأتمتة اختبار المتصفح (Selenium، Playwright، Cypress) لتحديد موقع العناصر في الصفحة، خاصة عندما لا تستطيع محددات CSS وحدها التعبير عن الشرط المطلوب.

XPath مقابل محددات CSS — أيهما يجب أن أستخدم؟

إنهما متداخلان لكنهما ليسا متكافئين. يمكن لـ XPath اختيار عنصر أب بناءً على محتوى عنصر ابن (`//div[span='Total']`)، والتنقل صعودًا إلى الأسلاف، والاختيار حسب النص المرئي (`//button[contains(text(),'Submit')]`) — لا يمكن لمحددات CSS التنقل صعودًا في الشجرة ولا يمكنها المطابقة على محتوى النص إطلاقًا. إذا كنت تختار فقط حسب الوسم أو الفئة أو المعرف نزولاً عبر المستند، فمحددات CSS أبسط في الكتابة وأسرع عمومًا في التقييم. اِلجأ إلى XPath تحديدًا عندما تحتاج "اختيار الأب لهذا النص" أو "الاختيار حسب ما يقوله العنصر"، وليس فقط حسب وسمه أو فئته.

هل تدعم هذه الأداة وظائف XPath 2.0 أو 3.0؟

لا — ولا يدعمها أي متصفح. تنفذ المتصفحات XPath 1.0 (توصية W3C لعام 1999) عبر `document.evaluate()`، وتستخدم هذه الأداة نفس المحرك الأصلي، لذا فهي دقيقة بما يطابق ما تحصل عليه عند تشغيل نفس التعبير في أدوات مطوري المتصفح أو جافاسكريبت. الوظائف والميزات المُقدَّمة في XPath 2.0/3.0/3.1 (مثل تعبيرات `for`، والتسلسلات، أو `matches()` مع التعبيرات النمطية) غير متوفرة هنا — تعمل فقط وظائف الإصدار 1.0 مثل `contains()` و`starts-with()` و`substring()` و`count()` و`position()` و`last()`.

ما هي بعض تعبيرات XPath الشائعة التي يجب أن أعرفها؟

`//tag` تختار كل `<tag>` في أي مكان بالمستند. `//tag[@attr='value']` تختار عناصر `<tag>` التي تساوي سمتها `attr` القيمة `value`. `//tag[contains(text(),'x')]` تختار عناصر `<tag>` التي يحتوي نصها المباشر على `x`. `//tag[1]` تختار أول عنصر شقيق `<tag>` في كل أب. `//parent/child` تختار عناصر `<child>` التي هي أبناء مباشرون لـ `<parent>`. `count(//tag)` تُعيد رقمًا بدلاً من مجموعة عُقد.

هل تتعامل هذه الأداة مع مساحات أسماء XML؟

تُدعم فقط الحالة الشائعة بدون مساحة أسماء بشكل سليم، والتي تغطي الغالبية العظمى من مستندات XML/HTML المكتوبة يدويًا أو المكشوطة. إذا كان مستندك يُعلن عن مساحة أسماء XML (مثل `xmlns="..."` على العنصر الجذر)، فإن `document.evaluate` يتطلب دالة حلّ واعية بمساحات الأسماء تُطابق البادئات بعناوين URI، وهو ما لا تُعدّه هذه الأداة البسيطة — قد تُعيد التعبيرات على XML ذي مساحة أسماء صفر مطابقات حتى لو بدت صحيحة. هذا قيد معروف وليس خطأً: احذف إعلان مساحة الأسماء من عينتك، أو استخدم دالة local-name() كحل بديل (مثل `//*[local-name()='title']`).

هل يُرسل مستند XML أو تعبير XPath الخاص بي إلى خادم؟

لا. كل شيء يعمل محليًا باستخدام `DOMParser` و`document.evaluate()` المدمجين في متصفحك — نفس المحرك الذي يستخدمه متصفحك داخليًا بالفعل. لا يغادر أي شيء تكتبه أو تلصقه جهازك إطلاقًا.