يحتوي PHP5 على دعم XML محسّن ويستخدم DOM لتوسيع إمكانات تشغيل XML. تعد هذه الوظائف جزءًا من PHP5 الأساسي ولا تحتاج إلى التثبيت لاستخدامها.
يوضح المثال التالي ببساطة تشغيل DOM على XML. للحصول على شرح مفصل، يرجى الاطلاع على التعليقات في الكود
<?
/******************************************************************************************************************************************************************************
** استخدم XML في PHP5
** موقع مرجعي:
** http://cn.php.net/manual/zh/ref.dom.php
** تحتاج أكواد المتابعة إلى دعم PHP5
** www.knowsky.com
***************************************************/
// قم أولاً بإنشاء كائن DOMDocument
$dom = new DomDocument();
// ثم قم بتحميل ملف XML
$dom -> تحميل("test.xml");
// إخراج ملف XML
//header("نوع المحتوى: نص/xml;charset=gb2312");
//echo $dom -> saveXML();
// احفظ ملف XML، قيمة الإرجاع هي int (حجم الملف بالبايت)
//$dom -> save("newfile.xml");
echo "<hr/>احصل على كافة عناصر العنوان:<hr/>";
$titles = $dom -> getElementsByTagName("title");
foreach ($العناوين كعقدة $)
{
echo $node -> textContent "<br/>";
// وهذا جيد أيضًا
//echo $node->firstChild->data "<br/>";
}
/*
echo "<hr/>اجتياز كافة العقد من العقدة الجذرية:<br/>";
foreach ($dom->documentElement->childNodes كعناصر $) {
// إذا كانت العقدة عنصرًا (nodeType == 1) وكان الاسم عنصرًا، فتابع التكرار
إذا ($items->nodeType == 1 && $items->nodeName == "item") {
foreach ($items->childNodes كعناوين $) {
// إذا كانت العقدة عنصرًا والاسم هو العنوان، فاطبعه.
إذا ($titles->nodeType == 1 && $titles->nodeName == "title") {
طباعة $titles->textContent "n";
}
}
}
}
*/
// استخدم XPath للاستعلام عن البيانات
echo "<hr/>نتيجة عقدة العنوان لاستخدام استعلام XPath:<hr/>";
$xpath = new domxpath($dom);
$titles = $xpath->query("/rss/channel/item/title");
foreach ($العناوين كعقدة $)
{
echo $node->textContent."<br/>";
}
/*
يشبه هذا استخدام طريقة getElementsByTagName()، ولكن إذا كان Xpath أكثر قوة وتعمقًا، فقد يكون الأمر على النحو التالي:
/rss/channel/item[position() = 1]/title يُرجع كافة عناصر عنصر العنصر الأول
/rss/channel/item/title[@id = '23'] إرجاع كافة العناوين التي تحتوي على سمة المعرف ولها قيمة 23
/rss/channel/&folder&/title يعرض العناوين ضمن جميع عناصر المقالات (ملاحظة المترجم: &folder& يمثل عمق الدليل)
*/
//اكتب بيانات جديدة في DOM
$item = $dom->createElement("item");
$title = $dom->createElement("title");
$titleText = $dom->createTextNode("نص العنوان");
$title->appendChild($titleText);
$item->appendChild($title);
$dom->documentElement->getElementsByTagName('channel')->item(0)->appendChild($item)
;
//$dom->documentElement->RemoveChild($dom->documentElement->getElementsByTagName("channel")->item(0));
// أو استخدم xpath للاستعلام عن العقدة وحذفها
//$dom->documentElement->RemoveChild($xpath->query("/rss/channel")->item(0));
//$dom->save("newfile.xml");
// تعديل بيانات العقدة من DOM
// تعديل ملف العنوان الأول
// هذا المكان غبي، أنشئ عقدة جديدة، ثم استبدل العقدة القديمة. إذا كان أي شخص لديه أي طرق جيدة أخرى، من فضلك قل لي.
$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
$newTitle = $dom->createElement("title");
$newTitle->appendChild(new DOMText("هذا هو نص العنوان الجديد !!!"));
$firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
// تعديل الخصائص
//$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
//$firstTitle->setAttribute("orderby", "4");
$dom->save("newfile.xml");
echo "<hr/><a href="newfile.xml">عرض newfile.xml</a>";
// الكود التالي يحصل على ملف php ستعرض الصفحة الرئيسية لـ .net محتوى عنصر العنوان الأول.
/*
$dom->loadHTMLFile(" http://www.php.net/ ");
$title = $dom->getElementsByTagName("title");
طباعة $title->item(0)->textContent;
*/
?>
ما يلي هو رمز ملف test.xml:
<?xml version="1.0" encoding="gb2312"?>
< نسخة آر إس إس = "2.0">
<القناة>
<العنوان>جافا سكريبت</title>
<link>http://blog.csdn.net/zhongmao/category/29515.aspx</link>
<description>جافا سكريبت</description>
<language>zh-chs</language>
<generator>.الإصدار النصي 0.958.2004.2001</generator>
<العنصر>
<creator>زونجماو</creator>
<title orderby="1">أخرج برنامج Excel واستخدم جافا سكريبت</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</link>
<pubdate>الأربعاء، 15 سبتمبر 2004، الساعة 13:32:00 بتوقيت جرينتش</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx</guid>
<comment>http://blog.csdn.net/zhongmao/comments/105385.aspx</comment>
<comments>http://blog.csdn.net/zhongmao/archive/2004/09/15/105385.aspx#feedback</comments>
<التعليقات>2</التعليقات>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/105385.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/105385.aspx</ping>
<description>وصف الاختبار</description>
</البند>
<العنصر>
<creator>زونجماو</creator>
<title orderby="2">أخرج الكلمة المستخدمة جافا سكريبت</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</link>
<pubdate>الجمعة، 06 أغسطس 2004، الساعة 16:33:00 بتوقيت جرينتش</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx</guid>
<comment>http://blog.csdn.net/zhongmao/comments/67161.aspx</comment>
<comments>http://blog.csdn.net/zhongmao/archive/2004/08/06/67161.aspx#feedback</comments>
<تعليقات>0</تعليقات>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/67161.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/67161.aspx</ping>
<description>اختبار وصف الكلمة</description>
</البند>
<العنصر>
<creator>زونجماو</creator>
<title orderby="3">xmlhttp</title>
<link>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</link>
<pubdate>الإثنين، 02 أغسطس 2004، الساعة 10:11:00 بتوقيت جرينتش</pubdate>
<guid>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx</guid>
<comment>http://blog.csdn.net/zhongmao/comments/58417.aspx</comment>
<comments>http://blog.csdn.net/zhongmao/archive/2004/08/02/58417.aspx#feedback</comments>
<تعليقات>0</تعليقات>
<commentrss>http://blog.csdn.net/zhongmao/comments/commentrss/58417.aspx</commentrss>
<ping>http://blog.csdn.net/zhongmao/services/trackbacks/58417.aspx</ping>
<description>xmlhttpaaa asd bb cc dd</description>
</البند>
</القناة>
</rss>