• 0
HuSsAm Klhasan

XPath

سؤال

السلام عليكم,,,,

الهدف الحقيقي لطرحي هذا الموضوع هو مقالة أضفتها مؤخرا

تتحدث عن XQuery وقد \كرت ضمنها الXPath من دون أن أتطرق لها ولو بشكل موجز ,,,

بعد اغفالي هذا أحببت أن اعوض هذا الاغفال بمقاصلة قصيرة منفردة,,,

وقبل البدء بها سوف اضع لكم اخواني رابط موضوع ال XQuery ورابط موضوع ال Xml لتكون في نهاية مقالي هذا السلسلة اكتملت,,,

والترتيب كالتالي :

XML

XPATH

XQUERY

رابط موضوع ْْXML

رابط موضوع XQUery

لنبدأ على بركة الله ,,,,

XPath

هي لغة لإيجاد المعلومات في مستندات الـ XML

XPath Syntax

الـ XPath تستخدم Path Expression للوصول إلى عقد في مستند الـ XML .

لشرح قواعد الـ XPath سنستخدم مستند الـ XML التالي :

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>

من أهم الـPath Expression المستخدمة للوصول إلى عقد معينة:

Expression	Description
nodename اختيار كل العقد الأبناء للعقدة المسماة
/ الاختيار يبدأ من عقدة الجذر
// اختيار العقد بدءاً من العقدة المطابقة الحالية بغض النظر عن مكان وجودها في
المستند
. اختيار العقدة الحالية (نقطة)
.. اختيار العقدة الأب للعقدة الحالية (نقطتين)
@ اختيار خاصية

لنطبق هذه التعابير على المستند السابق :

Path Expression	Result
bookstore كل العقد الأبناء للعنصر bookstore
/bookstore العنصر الجذر bookstore
Note: If the path starts with a slash ( / ) it always represents an absolute path to an element!
bookstore/book كل العناصر book والتي تمثل أبناء الـ bookstore
//book كل العناصر book بغض النظر عن أماكن وجودها في المستند
bookstore//book كل العناصر book والتي تمثل descendant للعنصر bookstore بغض
النظر عن المستوى الموجودة فيه العناصر
//@lang كل الخصائص lang



لتحديد عقدة محددة نريد الوصول إليها نستخدم الـ Predicates , في الجدول التالي نعرض أهم التعابير التي نستخدم فيها الـ predicates :

Path Expression	Result
/bookstore/book[1] أول عنصر book والذي يمثل ابن للعنصر bookstore
Note: IE5 and later has implemented that [0] should be the first node, but according to the W3C standard it should have been [1]!!
/bookstore/book[last()] اّخر عنصر book والذي يمثل ابن للعنصر bookstore
/bookstore/book[last()-1] العنصر book قبل الأخير والذي يمثل ابن للعنصر
bookstore
/bookstore/book[position()<3] أول عنصرين book واللذين يمثلان أبناء للعنصر bookstore
//title[@lang] كل العناصر title والتي تملك الخاصية lang
//title[@lang='eng'] كل العناصر title والتي تملك الخاصية lang بحيث هذه
الخاصية لها القيمة 'eng'
/bookstore/book[price>35.00] كل العناصر book للعنصر bookstore والتي تملك عنصر
Price وقيمته أكبر من 35.00
/bookstore/book[price>35.00]/title كل العناصرtitle للعنصر book للعنصر bookstore والتي تملك عنصر Priceوقيمته أكبر من 35.00

الجدول التالي يبين كيف يمكن استخدام الـ wildcard في الاستعلام من مستند الـ XML

Wildcard	Description
* يطابق أي عقدة
@* يطابق أي عقدة من نوع خاصية
node() يطابق أي عقدة من أي نوع

ولتطبيق ما سبق على المثال :

Path Expression	Result
/bookstore/* كل العقد الأبناء للعنصر bookstore
//* كل العناصر في المستند
//title[@*] كل العناصر title والتي تملك أي خاصية

كما استخدام | للوصول إلى مسارات متعددة :

Path Expression	Result
//book/title | //book/price كل العناصر title و price للعنصر book
//title | //price كل العناصر title و price في المستند
/bookstore/book/title | //price كل العناصر title للعنصر book للعنصر bookstore وكل العناصر price في المستند

[/
code]
XPath Axes

تعرف مجموعة من العقد بالنسبة إلى العقدة الحالية
[code]AxisName Result
ancestor كل العقد التي تمثل سلف للعقدة الحالية (أب , جد ...)
ancestor-or-self كل العقد التي تمثل سلف للعقدة الحالية (أب , جد ...) بالإضافة للعقدة الحالية
attribute كل الخصائص للعقدة الحالية
child كل أبناء العقدة الحالية
descendant كل العقدة المنحدرة من العقدة الحالية (ابن ,حفيد ...)
descendant-or-self كل العقدة المنحدرة من العقدة الحالية (ابن ,حفيد ...) بالإضافة للعقدة الحالية
following كل شيء يلي وسم الإغلاق للعقدة الحالية في المستند
following-sibling كل العقد الأخوة والتي تأتي بعد العقدة الحالية
namespace كل العقد namespace للعقدة الحالية
parent العقدة الأب للعقدة الحالية
preceding كل شيء قبل وسم الفتح للعقدة الحالية في المستند
preceding-sibling كل العقد الأخوة والتي تأتي قبل العقدة الحالية
self العقدة الحالية


السلام عليكم,,,

تم تعديل بواسطه HuSsAm Klhasan
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

3 إجابة على هذا السؤال .

  • 0

أرجو من المشرفين تثبيت موضوع XML و َْXQuery و XPath,,,,,لكي لاتضيع المعلومة على زوار المنتدى وتصبح قيد الارشيف والاهمال ,,,ولامر متروووك لقيادتكم الجكيمة,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكوووور جدا على هذا الجهد الأكثر من رائع

:)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله تعالى وبركاته

شكرا اخي على المعلومات الرائعة ولكن لم افهم صراحة فائدة xpath

يعني للوصول العقد اين الفائدة اين تكمن الفائدة في الوصول الى العقد

اتمنى ان يكون السؤال واضح والف شكر سلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .