PHP – پارسر XML Expat

پارسر داخلی XML Expat امکان پردازش اسناد XML را در PHP فراهم می‌کند.

پارسر XML Expat

پارسر Expat یک پارسر مبتنی بر رویداد (event-based parser) است.

به مثال زیر از یک تکه XML توجه کنید:

<from>Jani</from>

یک پارسر مبتنی بر رویداد، XML بالا را به عنوان یک سری از سه رویداد گزارش می‌دهد:

  1. شروع عنصر (Start element): from
  2. شروع بخش CDATA، مقدار: Jani
  3. بستن عنصر (Close element): from

توابع پارسر XML Expat بخشی از هسته PHP هستند و نیازی به نصب جداگانه ندارند.

فایل XML

فایل XML “note.xml” در مثال زیر استفاده خواهد شد:

<?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>

راه‌اندازی پارسر XML Expat

ما می‌خواهیم پارسر XML Expat را در PHP راه‌اندازی کنیم، برخی از هندلرها (handlers) را برای رویدادهای مختلف XML تعریف کنیم و سپس فایل XML را پارس کنیم.

مثال

<?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
xml_parser_free($parser);
?>

توضیح مثال:

  • پارسر XML را با تابع xml_parser_create() راه‌اندازی کنید.
  • توابعی برای استفاده با هندلرهای رویداد مختلف ایجاد کنید.
  • تابع xml_set_element_handler() را اضافه کنید تا مشخص کنید کدام تابع هنگام برخورد پارسر با تگ‌های باز و بسته اجرا خواهد شد.
  • تابع xml_set_character_data_handler() را اضافه کنید تا مشخص کنید کدام تابع هنگام برخورد پارسر با داده‌های کاراکتری اجرا خواهد شد.
  • فایل “note.xml” را با تابع xml_parse() پارس کنید.
  • در صورت بروز خطا، تابع xml_error_string() را برای تبدیل خطای XML به توضیح متنی اضافه کنید.
  • با تابع xml_parser_free() حافظه تخصیص داده شده با xml_parser_create() را آزاد کنید.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.