XPath
زبان پیمایش درخت XML با XPath — انتخاب عناصر و ویژگیها
XPath چیست؟
XPath زبانی برای پیمایش در اسناد XML و انتخاب عناصر و ویژگیهاست. نامش از عبارت XML Path Language میآید چون مثل مسیرهای فایل سیستم عمل میکند.
XPath خودش بخشی از استاندارد XSLT است اما در XQuery، XPointer، و کتابخانههای پارس XML همه زبانهای برنامهنویسی هم استفاده میشود.
مثال: سند XML نمونه
<bookstore>
<book category="web">
<title lang="en">XPath Tutorial</title>
<author>Sara</author>
<price>35</price>
</book>
<book category="programming">
<title lang="en">XML Guide</title>
<author>Ali</author>
<price>45</price>
</book>
</bookstore>
عبارات مسیر XPath
| عبارت | معنی |
|---|---|
bookstore | عنصر bookstore (فرزند گره فعلی) |
/bookstore | عنصر bookstore از ریشه |
bookstore/book | عناصر book که فرزند bookstore هستند |
//book | همه عناصر book در هر جای سند |
//book/title | عناصر title داخل همه bookها |
//@lang | همه ویژگیهای lang |
پیشنیازها (Predicates)
با کروشه [ ] میتوانید شرط بگذارید:
| عبارت | معنی |
|---|---|
/bookstore/book[1] | اولین book (ایندکس از ۱ شروع میشود!) |
/bookstore/book[last()] | آخرین book |
/bookstore/book[position()<3] | دو book اول |
//title[@lang] | عناصر title که ویژگی lang دارند |
//title[@lang="en"] | titleهایی که lang برابر en است |
/bookstore/book[price>35] | bookهایی که قیمت بالای ۳۵ دارند |
/bookstore/book[price>35]/title | عنوان همان bookها |
برخلاف اکثر زبانها، ایندکس XPath از ۱ شروع میشود نه صفر!
انتخاب مسیرهای ناشناخته
/— از ریشه شروع کن//— هر جا که باشد (فرزند، نوه، عمیقتر...).— گره فعلی..— والد گره فعلی@— انتخاب ویژگی
عملگرهای XPath
| عملگر | توضیح | مثال |
|---|---|---|
| | ترکیب دو نتیجه | //book/title | //book/price |
+ - * div | حسابی | 6 div 2 |
= != < <= > >= | مقایسه | price!=30 |
or and | منطقی | price>30 and price<50 |
توابع پرکاربرد XPath
text()— متن عنصر://title/text()contains()— شامل بودن://title[contains(text(), "XML")]starts-with()— شروع با://author[starts-with(text(), "A")]count()— شمارش:count(//book)name()— نام عنصر
محورهای XPath (Axes)
برای پیمایش نسبی (والد، خواهربرادر، فرزند...) از محورها استفاده میشود:
| محور | معنی |
|---|---|
parent | والد گره فعلی |
child | فرزندان (پیشفرض) |
ancestor | همه اجداد |
descendant | همه فرزندان در همه سطوح |
following-sibling | هموالدهای بعدی |
preceding-sibling | هموالدهای قبلی |
مثال: //title/ancestor::book — همه bookهایی که والدِ یک title هستند.
XPath را در XSLT (درس قبل)، XQuery (درس بعد) و در برنامهنویسی (مثل
SimpleXMLElement->xpath() در PHP یا document.evaluate() در جاوااسکریپت) خواهید دید. تسلط بر XPath، کار با همه این ابزارها را ساده میکند.این مبحث بخشی از دوره آموزش کامل XML است.