سوف استخدم كلاس domDocument وكلاس domNodeلكي اطبع كل التاغات التي في الملف حسب ترتيبها
في ملف html، ومن هذا المثال اعتقد سوف تتمكن من الوصول إلى اي تاغ تريده، وعرضه بالطريقة والترتيب الذي تريد.
القسم الأول من الكود(احضار ملف ال html)
كود PHP:
$dom = new DOMDocument();
$dom->loadHTMLFile("page.html");
$html = $dom->getElementsByTagName("html")->item(0);
PrintChildElements($html->childNodes,"");
في البداية عرفنا الكلاس ثم احضرنا الصفحة page.html التي سوف نحللها، وطبعًا ممكن ان تضع مكان اسم الصفحة رابط لصفحة بموقع.
وبعد ذلك احضرنا التاغ html وهو التاغ الرئيسي في الملف. وتحته يوجد تاغات الhead وال body والتي بدورها تحوي تاغات"وسوم" فرعية.
مثل title : هو وسم فرعي لل head لأننا نضعه داخله.
لكي نصل إلى وسم حسب اسمه ننفذ:
كود PHP:
$html = $dom->getElementsByTagName("html")->item(0);
ماهي دالة item?
لو نفذنا:
كود PHP:
$dom->getElementsByTagName("html")
سوف يرجع لنا كائن من نوع DOMNodeList
أي عبارة عن قائمة تحوي كل الوسوم التي تحمل هذا الاسم
الكلاس:
http://www.php.net/manual/en/class.domnodelist.php
ولكي نصل إلى node محدد نستخدم الدالة item
لكي نصل إلى الوسوم الفرعية لوسم معين ننفذ الدالة الفرعية childNodes
لو نفذنا :
كود PHP:
$html = $dom->getElementsByTagName("html")->item(0);
echo $html->childNodes->length
سوف يطبع لنا في حالتنا 2.
وهو عدد الوسوم الفرعية للوسم html
الوسوم الفرعية هي head و body
ولو نفذنا نفس الدالة على الوسم head سيظهر لنا الوسوم الفرعية له
القسم الثاني(اظهار جميع الوسوم الفرعية لوسم معين)
نستعمل الدالة التالية:
كود PHP:
function PrintChildElements($domList,$level){
if ($domList->length ==0)
return ;
else{
$level++;
foreach($domList as $item){
if ($item->nodeName !="#text"){
echo $level." ".$item->nodeName."<br>";
PrintChildElements($item->childNodes,$level);
}
}
}
}
انصحك بمراجعة الكلاسات التالية:
http://www.php.net/manual/en/class.domnodelist.php http://www.php.net/manual/en/class.domdocument.php http://www.php.net/manual/en/class.domnode.php
المثال في المرفقات