PHP – پارسرهای XML

XML زبانی است برای ساختاردهی داده‌ها به منظور به اشتراک‌گذاری در وب‌سایت‌ها. فناوری‌های وب مانند فیدهای RSS و پادکست‌ها از XML استفاده می‌کنند. XML به راحتی قابل ایجاد است و شبیه HTML به نظر می‌رسد، به جز اینکه شما برچسب‌های خود را ایجاد می‌کنید.

برای کار با اسناد XML (خواندن، به‌روزرسانی، ایجاد و دستکاری) نیاز به یک پارسر XML دارید.

در PHP دو نوع اصلی از پارسرهای XML وجود دارد:

  1. پارسرهای مبتنی بر درخت (Tree-Based Parsers)
  2. پارسرهای مبتنی بر رویداد (Event-Based Parsers)

پارسرهای مبتنی بر درخت (Tree-Based Parsers)

این نوع پارسرها کل سند را در حافظه نگه می‌دارند و سند XML را به یک ساختار درختی تبدیل می‌کنند. آن‌ها کل سند را تحلیل کرده و دسترسی به عناصر درخت را فراهم می‌کنند (مانند DOM).

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

مثال‌هایی از پارسرهای مبتنی بر درخت:

  • SimpleXML
  • DOM

مثال: استفاده از SimpleXML

<?php
$xmlString = <<<XML
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>
XML;

$xml = simplexml_load_string($xmlString);

echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo $xml->body;
?>

مثال: استفاده از DOM

<?php
$xmlString = <<<XML
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>
XML;

$dom = new DOMDocument();
$dom->loadXML($xmlString);

$to = $dom->getElementsByTagName('to')->item(0)->nodeValue;
$from = $dom->getElementsByTagName('from')->item(0)->nodeValue;
$heading = $dom->getElementsByTagName('heading')->item(0)->nodeValue;
$body = $dom->getElementsByTagName('body')->item(0)->nodeValue;

echo $to . "<br>";
echo $from . "<br>";
echo $heading . "<br>";
echo $body;
?>

پارسرهای مبتنی بر رویداد (Event-Based Parsers)

این نوع پارسرها کل سند را در حافظه نگه نمی‌دارند. بلکه یک گره در هر زمان می‌خوانند و به شما امکان تعامل در زمان واقعی را می‌دهند. پس از حرکت به گره بعدی، گره قبلی دور ریخته می‌شود.

این نوع پارسر برای اسناد بزرگ XML مناسب است. سریع‌تر تجزیه می‌کند و حافظه کمتری مصرف می‌کند.

مثال‌هایی از پارسرهای مبتنی بر رویداد:

  • XMLReader
  • XML Expat Parser

مثال: استفاده از XMLReader

<?php
$xmlString = <<<XML
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>
XML;

$reader = new XMLReader();
$reader->xml($xmlString);

while ($reader->read()) {
    if ($reader->nodeType == XMLReader::ELEMENT) {
        switch ($reader->localName) {
            case "to":
                $reader->read();
                echo $reader->value . "<br>";
                break;
            case "from":
                $reader->read();
                echo $reader->value . "<br>";
                break;
            case "heading":
                $reader->read();
                echo $reader->value . "<br>";
                break;
            case "body":
                $reader->read();
                echo $reader->value;
                break;
        }
    }
}
$reader->close();
?>

نتیجه‌گیری

  • پارسرهای مبتنی بر درخت (Tree-Based Parsers): مناسب برای اسناد XML کوچک و تحلیل کامل سند. مثال‌ها شامل SimpleXML و DOM هستند.
  • پارسرهای مبتنی بر رویداد (Event-Based Parsers): مناسب برای اسناد XML بزرگ و تحلیل سریع و کم حافظه. مثال‌ها شامل XMLReader و XML Expat Parser هستند.

هر دو نوع پارسر کاربردهای خاص خود را دارند و انتخاب بین آن‌ها بستگی به نیازهای پروژه و اندازه سند XML دارد.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
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() حذف کنید. مثالحذف...

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

نظرات

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

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