با عرض سلام خدمت کاربران محترم سایت پی وی لرن. در این آموزش قصد داریم تا نحوه خواندن فایل XML در PHP با استفاده از مفسر Expat و کار با expat در php را آموزش دهیم.
همچنین در جلسات قبل آموزش کار با XML در PHP و نحوه خواندن فایل XML در PHP با استفاده از مفسر SimpleXML را ارائه دادیم که می توانید به آن ها مراجعه نمایید.
مفسر Expat این امکان را به ما می دهد تا بتوانیم اسناد XML را در PHP پردازش کنیم.
پارسر Expat از نوع event-based می باشد.
به کد زیر توجه فرمایید:
1 | <from>Jani</from> |
یک پارسر event-based کد xml بالا را در سه رویداد گزارش می دهد:
توابع پارسر Expat جزئی از هسته php می باشند و نیازی به نصب ندارند.
فایل xml به نام note.xml که در مثال های زیر از آن استفاده خواهیم کرد به شکل زیر می باشد:
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> |
قصد داریم تا پارسر Expat را در php راه اندازی کنیم.
ابتدا چند مدیریت کننده برای رویداد های مختلف XML تعریف کرده و بعد فایل XML را تجزیه می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?php // راه اندازی پارسر xml $parser=xml_parser_create(); // تابعی که در ابتدای هر عنصر استفاده می شود function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Note --<br>"; break; case "TO": echo "To: "; break; case "FROM": echo "From: "; break; case "HEADING": echo "Heading: "; break; case "BODY": echo "Message: "; } } // تابعی که در انتهای هر عنصر استفاد می شود function stop($parser,$element_name) { echo "<br>"; } // تابعی که وقتی کاراکتری را پیدا کردیم استفاده می شود function char($parser,$data) { echo $data; } // تعیین کردن مدیریت کننده عنصر xml_set_element_handler($parser,"start","stop"); // تعیین کردن مدیریت کننده داده xml_set_character_data_handler($parser,"char"); // باز کردن فایل XML $fp=fopen("note.xml","r"); // خواندن داده while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } // آزاد کردن پارسر xml_parser_free($parser); ?> |
توضیحات کد:
جلسه کار با Expat در php نیز به پایان رسید.
در جلسه بعد به آموزش مفسر DOM در php خواهیم پرداخت. با ما همراه باشید.