پارسکننده Expat XML در PHP
پارسز درونبنا Expat امکان پردازش مستندات XML در PHP را فراهم میکند.
XML چیست؟
XML برای توصیف دادهها استفاده میشود، که تمرکز آن بر روی این است که دادهها چه چیزی هستند. فایل XML ساختار دادهها را توصیف میکند.
در XML، هیچ برچسب پیشتعریفشدهای وجود ندارد. شما باید برچسبهای خود را تعریف کنید.
اگر میخواهید بیشتر درباره XML یاد بگیرید، لطفاً به تدریس XML.
Expat چیست؟
برای خواندن و بهروزرسانی - ایجاد و پردازش یک مستند XML، شما نیاز به پارسز XML دارید.
دو نوع اساسی از پارسز XML وجود دارد:
- پارسز مبتنی بر درختاین نوع پارسز مستند XML را به ساختار درختی تبدیل میکند. آن را تحلیل میکند و API ارائه میدهد تا به عناصر درخت دسترسی پیدا کنید، مانند مدل مستند (DOM).
- پارسز مبتنی بر رویدادXML مستند را به عنوان یک مجموعه از رویدادها در نظر میگیرد. هنگامی که رویدادی خاص رخ میدهد، پارسز به توابعی فراخوانی میکند تا آن را پردازش کنند.
پارساز Expat پارسز مبتنی بر رویداد است.
پارساز مبتنی بر رویداد بر روی محتوای مستند XML تمرکز دارد، نه بر روی نتایج آن. به همین دلیل، پارسز مبتنی بر رویداد میتواند به سرعتتر به دادهها دسترسی پیدا کند.
لطفاً بخش زیر XML را ببینید:
<from>جان</from>
پارساز مبتنی بر رویداد، XML بالا را به عنوان یک مجموعه از سه رویداد گزارش میکند:
- شروع علامت بسته: from
- شروع بخش CDATA، مقدار: جان
- بستن علامت بسته: from
مثال XML بالا شامل XML خوب است. اما این مثال XML معتبر نیست، زیرا هیچ DTD مرتبطی با آن ندارد و DTD درونی نیز ندارد.
اما، در استفاده از پارساز Expat، این تفاوتی ندارد. Expat پارسری است که برروی اعتبار بررسی نمیکند و هر DTD را نادیده میگیرد.
به عنوان یک پارساز XML مبتنی بر رویداد و غیربررسی، Expat سریع و سبک است و بسیار مناسب برای برنامههای وب PHP است.
توجه:مستند XML باید خوب باشد، در غیر این صورت Expat خطا تولید خواهد کرد.
نصب
پارساز Expat بخشی از هسته PHP است. نیازی به نصب نیست تا از این توابع استفاده کنید.
فایل XML
در مثال ما از فایل XML زیر استفاده خواهیم کرد:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>جورج</to> <from>جان</from> <heading>یادآوری</heading> <body>یاد نکنید که جلسه را فراموش نکنید!</body> </note>
XML پردازنده اولیهسازی شود
ما باید XML پردازنده را در PHP به صورت اولیهسازی کنیم، پردازشگرهای مختلف برای رویدادهای XML تعریف کنیم و سپس این فایل XML را پردازش کنیم.
مثال
<?php //Initialize the XML parser $parser=xml_parser_create(); //Function to use at the start of an element 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 to use at the end of an element function stop($parser,$element_name) { echo "<br />"; } //Function to use when finding character data function char($parser,$data) { echo $data; } //Specify element handler xml_set_element_handler($parser,"start","stop"); //Specify data handler xml_set_character_data_handler($parser,"char"); //Open XML file $fp=fopen("test.xml","r"); //Read data 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 xml_parser_free($parser); ?>
خروجی کد بالا:
-- یادداشت -- به جورج از جان عنوان: یادآوری پیام: نزدیک نشوید به جلسه!
توضیح مکانیزم کار:
- برای آغاز XML پردازشکننده از xml_parser_create() استفاده کنید
- ایجاد فنون برای هماهنگی با برنامههای مختلف پردازش رویداد
- برای تعریف اینکه هنگام مواجهه با برچسبهای شروع و پایان، کدام فنون باید اجرا شوند، از xml_set_element_handler() استفاده کنید
- برای تعریف اینکه هنگام مواجهه با دادههای متن، کدام فنون باید اجرا شوند، از xml_set_character_data_handler() استفاده کنید
- برای تحلیل فایل "test.xml" از xml_parse() استفاده کنید
- در صورت وجود خطا، از xml_error_string() برای تبدیل خطاهای XML به توضیحات متنی استفاده کنید
- برای آزاد کردن حافظه اختصاص داده شده به xml_parser_create()، از xml_parser_free() استفاده کنید
اطلاعات بیشتری در مورد تحلیلکننده PHP Expat
برای اطلاعات بیشتر در مورد فنون PHP Expat، لطفاً به دستورالعملهای PHP XML Parser ما مراجعه کنید.