PHP – پارسرهای XML
XML زبانی است برای ساختاردهی دادهها به منظور به اشتراکگذاری در وبسایتها. فناوریهای وب مانند فیدهای RSS و پادکستها از XML استفاده میکنند. XML به راحتی قابل ایجاد است و شبیه HTML به نظر میرسد، به جز اینکه شما برچسبهای خود را ایجاد میکنید.
برای کار با اسناد XML (خواندن، بهروزرسانی، ایجاد و دستکاری) نیاز به یک پارسر XML دارید.
در PHP دو نوع اصلی از پارسرهای XML وجود دارد:
- پارسرهای مبتنی بر درخت (Tree-Based Parsers)
- پارسرهای مبتنی بر رویداد (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 دارد.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام