راه اندازی XML Expat Parser(Initializing the XML Expat Parser)

می‌خواهیم تجزیه‌کننده XML Expat را در 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("note.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)));

}



// Free the XML parser

xml_parser_free($parser);

?>




نمونه توضیح داده شده:



  1. تجزیه کننده XML را با تابع xml_parser_create() مقداردهی کنید

  2. عملکردهایی را برای استفاده با کنترل کننده های رویداد مختلف ایجاد کنید

  3. تابع xml_set_element_handler() را اضافه کنید تا مشخص کنید وقتی تجزیه کننده با تگ های باز و بسته کننده مواجه می شود کدام تابع اجرا می شود

  4. تابع xml_set_character_data_handler() را اضافه کنید تا مشخص کنید وقتی تجزیه کننده با داده های کاراکتر مواجه می شود کدام تابع اجرا می شود

  5. فایل "note.xml" را با تابع xml_parse() تجزیه کنید

  6. در صورت بروز خطا، تابع xml_error_string() را برای تبدیل خطای XML به توضیحات متنی اضافه کنید

  7. برای آزاد کردن حافظه اختصاص داده شده با تابع xml_parser_create()، تابع xml_parser_free() را فراخوانی کنید. li>