ניתוח קובץ ה-XML
ניתוח קובץ XML באמצעות המודול של DOM-XML הינו פשוט ביותר, משום שאת "העבודה הקשה" של ניתוח הקובץ עושים האובייקטים של המודול בעצמם. כל שנותר לך לעשות הוא לדלות את המידע הרצוי מתוך היררכיית האובייקטים של DOM. השימוש במודול הזה חוסך זמן ומקל הרבה על התכנות וניתוח הקובץ, אך מצד שני הוא מכרסם די הרבה זיכרון, ולכן מגביל את השימוש בו לקבצי XML לא גדולים מידי.
נכתוב קובץ include בו נגדיר פונקציות לניתוח קובץ ה-XML. הפונקציה תקבל מחרוזת של מסמך ה-XML, היא תנתח אותו באמצעות DOM-XML ובסוף תחזיר מערך עם כל הנתונים (שם המדווח, מפתח קיבוץ ורשימת ספרים ממויינים).
file name: books_xml_parse_func.inc
<?php function XML_ParseRecommends(
$xml_file)
{
$xml_doc=domxml_open_file($xml_file);/* | פותח את קובץ ה-XML ויוצר ממנו אובייקט של מסמך XML. | */ |
if (!$xml_doc)/* | אם קובץ ה-XML לא נותח כראוי. אירעה שגיאה. | */ |
return false;
$xml_recommends=$xml_doc->document_element();/* | מחזיר את אלמנט השורש. | */ |
$xml_reporter=
current(
$xml_recommends->get_elements_by_tagname("REPORTER")/* | מחזיר מערך של כל האלמנטים ששם התג שלהם הוא REPORTER. | */ |
);
$reporter=
utf8_decode($xml_reporter->get_content());/* | מפענחים את המחרוזת המקורית מתוך הקידוד של UTF8. | */ |
$xml_groupby=
current(
$xml_recommends->
get_elements_by_tagname(
"GROUPBY"));
$groupby=
$xml_groupby->get_attribute("key");/* | מחזיר את ערכו של המאפיין key, מפתח הקיבוץ. | */ |
$xml_groups=
$xml_groupby->child_nodes();/* | מחזיר מערך של כל האלמנטים הילדים שלו - הקבוצות. | */ |
$books=
array();
foreach (
$xml_groups as $xml_group)
{
$attr_value=
utf8_decode/* | מפענחים את המחרוזת המקורית מתוך הקידוד של UTF8. | */ |
(
$xml_group->get_attribute("value")/* | מחזיר את ערכו של המאפיין value. | */ |
);
$xml_books=
$xml_group->child_nodes();/* | מחזיר מערך של כל האלמנטים הילדים שלו - הספרים. | */ |
foreach (
$xml_books as $xml_book)
{
$xml_elems=
$xml_book->child_nodes();/* | מחזיר מערך של כל האלמנטים הילדים שלו - נתוני הספר. | */ |
$elems=
array();
foreach ($xml_elems as $xml_elem)/* | עוברים על כל הנתונים של הספר, ושומרים את כל המאפיינים במערך. | */ |
$elems[
$xml_elem->tagname()/* | מחזיר את השם של התג, האלמנט. | */ |
]=
utf8_decode(
$xml_elem->
get_content());
$books[$attr_value][]=$elems;/* | שומר את נתוני הספר במערך הספרים. כל ספר במקום המתאים לו עפ"י מפתח הקיבוץ. | */ |
}
}
$arr_info=array(/* | יוצר את מערך הנתונים שהפונקציה תחזיר. | */ |
"reporter"=>$reporter,
"groupby"=>$groupby,
"books"=>$books/* | מערך הספרים והקבוצות שלהם. | */ |
);
return $arr_info;
}
?>
גם בקובץ זה אנו משתמשים במודול DOM-XML, לכן גם בתחילת קובץ זה יש צורך לבדוק האם המודול נטען למנוע ה-PHP (בדיוק כמו בקובץ books_xml_create_func.inc).