پارسر XML
پارس اسناد XML در PHP و جاوااسکریپت — SimpleXML و DOMParser
پارسر چیست؟
پارسر XML برنامهای است که متن XML را میخواند و به ساختاری قابل استفاده در برنامه تبدیل میکند. دو رویکرد اصلی وجود دارد:
| رویکرد | توضیح | مناسب برای |
|---|---|---|
| درختی (Tree) | کل سند یکجا در حافظه بهصورت درخت بارگذاری میشود (DOM) | اسناد کوچک و متوسط، نیاز به پیمایش آزاد |
| رویدادی (Event) | سند بهصورت جریانی خوانده میشود و با هر عنصر رویداد صادر میشود (SAX) | اسناد حجیم، حافظه محدود |
SimpleXML در PHP
سادهترین راه پارس XML در PHP:
$xml = simplexml_load_file("books.xml");
// یا از رشته:
// $xml = simplexml_load_string($xmlString);
// دسترسی به عنصر مثل پراپرتی شی!
echo $xml->book[0]->title; // عنوان اولین کتاب
echo $xml->book[1]->price; // قیمت کتاب دوم
// ویژگیها مثل آرایه
echo $xml->book[0]['category'];
// پیمایش همه کتابها
foreach ($xml->book as $book) {
echo $book->title . " - " . $book->price . PHP_EOL;
}
SimpleXML فوقالعاده شهودی است: عنصرها مثل پراپرتی (
->title) و ویژگیها مثل ایندکس آرایه (['category'])!SimpleXML با XPath
$xml = simplexml_load_file("books.xml");
// کتابهای گرانتر از ۳۰
$expensive = $xml->xpath("/bookstore/book[price>30]");
foreach ($expensive as $book) {
echo $book->title . PHP_EOL;
}
DOMParser در جاوااسکریپت
در مرورگر، پارس XML با DOMParser:
const text = '<note><to>Ali</to><from>Sara</from></note>';
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(text, "text/xml");
xmlDoc.getElementsByTagName("to")[0].textContent; // "Ali"
بررسی خطاهای پارس
const xmlDoc = parser.parseFromString(text, "text/xml");
const errorNode = xmlDoc.querySelector("parsererror");
if (errorNode) {
console.error("خطای XML:", errorNode.textContent);
}
در جاوااسکریپت، سند XML خطادار استثنا پرتاب نمیکند! بهجای آن یک عنصر
<parsererror> در نتیجه قرار میدهد — حتماً آن را بررسی کنید.پارس رویدادی (SAX) — مفهومی
پارسرهای SAX مثل Expat در PHP، سند را خطبهخط میخوانند و برای هر رویداد (شروع عنصر، پایان عنصر، متن) تابع callback شما را صدا میزنند:
// شروع عنصر → onStartElement("book", ["category" => "web"])
// متن → onText("XML Guide")
// پایان عنصر → onEndElement("book")
مزیت: حافظه بسیار کم — کل سند هرگز یکجا در حافظه نیست. عیب: پیمایش معکوس و دسترسی تصادفی ممکن نیست.
کدام را انتخاب کنیم؟
- فایل کوچک، خواندن ساده: SimpleXML (PHP) یا DOMParser (JS)
- ویرایش و ساخت سند: DOMDocument
- فایل چند گیگابایتی: XMLReader یا SAX
- پرسوجوی پیچیده: SimpleXML + XPath
این مبحث بخشی از دوره آموزش کامل XML است.