الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

XPath

بدأه HuSsAm Klhasan في 13 سبتمبر 2011 · 3 رد · 5,456 مشاهدة · في XML و تطبيقاتها
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

تتحدث عن 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 في 13 سبتمبر 2011 في 20:57

2

(( الم * أَحَسِبَ النَّاسُ أَنْ يُتْرَكُوا أَنْ يَقُولُوا آمَنَّا وَهُمْ لَا يُفْتَنُونَ * وَلَقَدْ فَتَنَّا الَّذِينَ مِنْ قَبْلِهِمْ فَلَيَعْلَمَنَّ اللَّهُ الَّذِينَ صَدَقُوا وَلَيَعْلَمَنَّ الْكَاذِبِينَ))

#2

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

(( الم * أَحَسِبَ النَّاسُ أَنْ يُتْرَكُوا أَنْ يَقُولُوا آمَنَّا وَهُمْ لَا يُفْتَنُونَ * وَلَقَدْ فَتَنَّا الَّذِينَ مِنْ قَبْلِهِمْ فَلَيَعْلَمَنَّ اللَّهُ الَّذِينَ صَدَقُوا وَلَيَعْلَمَنَّ الْكَاذِبِينَ))

#3

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

:)

مواقع أعجبتني :

دورة عربية في الـ J2ME

#4

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

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

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

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

مواضيع مشابهة