تعرف على ملحق SimpleXML المضمن مع PHP الإصدار 5، والذي يمكّن صفحات PHP من الاستعلام عن XML والبحث فيه وتعديله وإعادة نشره في بناء جملة متوافق مع PHP.
يقدم الإصدار الخامس من PHP SimpleXML، وهي واجهة برمجة تطبيقات جديدة (API) لقراءة وكتابة XML. في SimpleXML، التعبير التالي:
$doc->rss->channel->item->title
حدد عناصر من المستند. من السهل كتابة هذا التعبير طالما أنك على دراية ببنية المستند. ومع ذلك، إذا لم يكن مكان ظهور العناصر المطلوبة واضحًا (كما هو الحال في Docbooks وHTML والمستندات السردية المشابهة)، فيمكن لـ SimpleXML استخدام تعبيرات XPath للعثور على هذه العناصر.
البدء باستخدام SimpleXML
لنفترض أنك بحاجة إلى صفحة PHP لتحويل موجز RSS إلى HTML. RSS هو تنسيق XML بسيط لنشر المحتوى المرتبط. العنصر الجذر للمستند هو آر إس إس، الذي يحتوي على عنصر القناة. يحتوي عنصر القناة على بيانات تعريف حول الموجز، مثل العنوان واللغة وعنوان URL. ويحتوي أيضًا على تقارير متنوعة مغلفة في عنصر العنصر. يحتوي كل عنصر على عنصر رابط، والذي يحتوي على عنوان URL، وعنوان أو وصف (كلاهما عادةً)، والذي يحتوي على نص عادي. لا يتم استخدام مساحات الأسماء. من المؤكد أن هناك ما هو أكثر من ذلك في خدمة RSS، ولكن هذا يكفي لهذه المقالة. تعرض القائمة 1 مثالاً نموذجيًا يحتوي على عنصرين من الأخبار.
القائمة 1. موجز RSS
<?xml version="1.0" encoding="UTF-8"?>
<rss الإصدار = "0.92">
<القناة>
<title>موكا مع شلاغ</title>
<link>http://www.elharo.com/blog</link>
<language>ar</language>
<العنصر>
<title>محطة بنسلفانيا: ذهب ولكن لم يُنس</title>
<وصف>
لقد تم هدم محطة بنسلفانيا القديمة في نيويورك قبل ولادتي.
عند النظر إلى هذه الصور، يبدو الأمر وكأنه خطأ في الموقع الحالي
وظيفية، ولكن ليس أكثر من مجرد بعض أبراج المكاتب ومترو الأنفاق
ممرات ليس لها أي أهمية أو جمال خاص.
</وصف>
<link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link>
</البند>
<العنصر>
<title>شخصية لإليوت هارولد</title>
<description>يستخدم بعض الأشخاص مرشحات البريد العشوائي البغيضة التي تتطلب منك
لكتابة بعض السلاسل العشوائية في موضوعك مثل E37T للوصول إليه.
وغني عن القول أنني لا أنا ولا معظم الأشخاص الآخرين نهتم بالتواصل معهم
هؤلاء المذعورون يبالغون في رد فعلهم تجاه مشكلة البريد العشوائي.
أنا شخصياً لن أفعل...</description>
<link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link>
</البند>
</القناة>
</rss>
لنقم بتطوير صفحة PHP لتنسيق موجز RSS إلى HTML. القائمة 2 توضح الهيكل الأساسي لهذه الصفحة.
القائمة 2. البنية الثابتة لكود PHP
<?php // تحميل وتحليل مستند XML ?>
<html xml:lang="ar" lang="ar">
<الرأس>
<title><?php // سيتم قراءة العنوان من RSS ?></title>
</الرأس>
<body>
<h1><?php // ستتم قراءة العنوان من RSS مرة أخرى ?></h1>
<?php
// هنا سنضع حلقة لتضمين عنوان كل عنصر ووصفه
?>
</الجسم
>
</html>
تحليل مستند XML
الخطوة الأولى هي تحليل مستند XML وحفظه في متغير. كل ما يتطلبه الأمر هو سطر واحد من التعليمات البرمجية، وتمرير عنوان URL إلى الدالة simplexml_load_file():
$rss = simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
في هذا المثال، قمت بملء الصفحة من موجز New York Times الخاص بـ Userland (على http://partners.userland.com/nytRss/nytHomepage.xml ). بالطبع، يمكن أيضًا استخدام أي عنوان URL لخلاصة RSS أخرى.
لاحظ أنه على الرغم من أن الاسم هو simplexml_load_file()، إلا أن هذه الوظيفة تقوم فعليًا بتوزيع مستند XML على عنوان URL البعيد لـ HTTP. لكن هذا ليس الشيء الوحيد الغريب في هذه الوظيفة. لا تشير القيمة المرجعة (المخزنة هنا في المتغير $rss) إلى المستند بأكمله، كما قد تتوقع إذا كنت قد استخدمت واجهات برمجة تطبيقات أخرى مثل نموذج كائن المستند (DOM). بدلاً من ذلك، فإنه يشير إلى العنصر الجذر للمستند. لا يمكن الوصول إلى محتويات مقدمة الوثيقة والخاتمة من خلال SimpleXML.
ابحث عن عنوان الخلاصة
يقع عنوان الخلاصة بالكامل (وليس عناوين القصص الفردية في الخلاصة) في العنوان الفرعي لقناة عنصر جذر rss. من السهل العثور على العنوان كما لو كان مستند XML عبارة عن نموذج متسلسل لكائن من فئة rss، حيث يحتوي حقل القناة نفسه على حقل عنوان. باستخدام بناء جملة مرجع كائن PHP العادي، تكون العبارة للعثور على العنوان كما يلي:
$title = $rss->channel->title;
بمجرد العثور عليه، يمكن إضافته إلى HTML الناتج. يعد القيام بذلك أمرًا سهلاً، ما عليك سوى تكرار المتغير $title:
<title><?php echo $title ?></title>
يقوم هذا السطر بإخراج قيمة السلسلة للعنصر بدلاً من العنصر بأكمله. وهذا يعني أن محتوى النص مكتوب ولكن لا يتم تضمين العلامات.
يمكنك أيضًا تخطي المتغير الوسيط $title تمامًا:
<title><?php echo $rss->channel->title ?></title>;
نظرًا لأن الصفحة تعيد استخدام هذه القيمة في أماكن متعددة، أجد أنه من الملائم أكثر تخزينها في متغير ذي معنى واضح.
…