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() را آزاد کنید.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

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

نظرات

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

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