پرس و جوی محتوای XML با XPath
XPath پیشنهاد رسمی W3C برای پرس و جو و جست و جو در محتوای XML است، در حقیقت XPath استانداری است که زبانی را در اختیار ما قرار میدهد که با استفاده از آن میتوانیم المانها و صفتها مختلف یک فایلXML را مورد بررسی قرار دهیم.
XPath دارای ویژگیها و امکانات زیر است:
Path Expression
Path Expression عبارت متنی است که به ما اجازه میدهد گره یا گرههایی را از داخل یک محتوای XML استخراج کنیم، جدول زیر عبارات مهم و کاربردی Path Expression را نشان میدهد.
عبارت | عملکرد | |
node-name | به کار بردن نام گره باعث میشود تا تمام گرههای با نام مورد نظر انتخاب شوند. | |
/ | مشخص میکند که انتخاب و جست و جو از ابتدای فایل صورت گیرد. | |
// | تمام گرهها صرف نظر از مکان آنها انتخاب میشوند. | |
. | گره فعلی را انتخاب میکند. | |
.. | پدر گره فعلی را انتخاب میکند. | |
@ | برای انتخاب بر حسب صفت به کار میرود. |
Predicates
پس از ساخت یک لیست توسط Path Expression با استفاده از Predicate میتوانیم گره یا گرههای خاصی را انتخاب میکنیم، Predicate با عبارت […] مشخص میشود که به جای … میتوانیم از توابع استاندارد، اندیس یا عبارات پیچیده تر برای انتخاب گرههای خاص استفاده کنیم، در ادامه با مثال با این موضوع آشنا میشویم:
عبارت | عملکرد | |
/class/student[1] | اولین گره student که زیر گره class باشد را انتخاب میکند. | |
/class/student[3] | سومین گره student که زیر گره class باشد را انتخاب میکند. | |
/class/student[last()] | آخرین گره student که زیر گره class باشد را انتخاب میکند. | |
/class/student[last()-1] | گره ماقبل آخر را با شرایط قبلی انتخاب میکند. | |
//student[@sid=’333’] | تمام گرههای student که دارای sid برابر با 333 هستند را انتخاب میکند. | |
/class/student[position()<3] | تمام گرههای student زیر گره class که اندیس آنها از 3 کمتر است را انتخاب میکند (یعنی دو گره ابتدایی انتخاب میشوند.)در اینجا اندیس از یک شروع میشود. |
استفاده از XPath در PHP
برای استفاده از xpath در PHP کافیست که فایل XML را بارگذاری کرده و سپس با استفاده از دستوراتی که در بالا ذکر شده اند، اقدام به انتخاب گره های مورد نظر خود کنید. در ادامه با استفاده از چند مثال به صورت عملی با موارد فوق آشنا میشویم. قبل از ادامه یک فایل XML به نام sample.xml ایجاد میکنیم و محتوای زیر را در آن مینویسیم و در درایو D ذخیره میکنیم:
<?xml version="1.0" encoding="utf-8" ?> <Persons> <Person name="John Smith"> <Age>30</Age> <Gender>Male</Gender> </Person> <Person name="Mike Folley"> <Age>25</Age> <Gender>Male</Gender> </Person> <Person name="Lisa Carter"> <Age>22</Age> <Gender>Female</Gender> </Person> <Person name="Jerry Frost"> <Age>27</Age> <Gender>Male</Gender> </Person> <Person name="Adam Wong"> <Age>35</Age> <Gender>Male</Gender> </Person> </Persons>
برای انتخاب گره ها یا افرادی از فایل بالا که سن (Age) آنها بزرگتر یا مساوی 25 سال است به صورت زیر عمل می کنیم :
1: <?php 2: if(!$xml = simplexml_load_file("D:/sample.xml")) 3: { 4: echo "Unable to load XML file"; 5: } 6: else 7: { 8: $persons = $xml->xpath("//Person[Age >= 25]"); 9: 10: foreach($persons as $person) 11: { 12: echo 'Person Name : ' . $person->attributes() . '<br/>'; 13: 14: foreach($person as $key => $value) 15: { 16: echo 'Person ' . $key . ' : ' . $value . '<br/>'; 17: } 18: 19: echo '<br/><br/>'; 20: } 21: } 22: ?>
Person Name : John Smith Person Age : 30 Person Gender : Male Person Name : Mike Folley Person Age : 25 Person Gender : Male Person Name : Jerry Frost Person Age : 27 Person Gender : Male Person Name : Adam Wong Person Age : 35 Person Gender : Male
برای انتخاب گرههای از نوع Person که جنسیت (Gender) در آنها زن (Female) باشد، کافی است که خط 8 کد بالا را به صورت زیر تغییر دهیم:
$persons = $xml->xpath("//Person[Gender='Female']");
Person Name: Lisa Carter Person Age: 22 Person Gender: Female
برای انتخاب گرهای از نوع Person که نام آن Adam Wong باشد، کافی است که خط 8 کد بالا را به صورت زیر تغییر دهیم:
$persons = $xml->xpath("//Person[@name='Adam Wong']");
Person Name : Adam Wong Person Age : 35 Person Gender : Male