سیمپل XML: خواندن (SimpleXML Parser)
«سیمپل اِکس اِم اِل (SimpleXML)» افزونه PHP برای خواندن داده XML است. این افزونه «درخت محور» است؛ یعنی کل سند را مثل یک درخت می بیند. بنابراین پیمایش نودها بسیار ساده می شود.
سیمپل XML چطور کمک می کند؟
با SimpleXML، نام المنت، «ویژگی ها (Attributes)»، و متن را راحت می گیری. چون ساختار را می دانی، دسترسی سریع است. همچنین خروجی مثل آبجکت/آرایه ها پیمایش می شود.
نصب و آماده سازی
از PHP 5 به بعد، SimpleXML جزو هسته است. بنابراین نصب جدا لازم نیست.
خواندن XML از رشته (String)
تابع simplexml_load_string() یک رشته XML را به شی SimpleXMLElement تبدیل می کند.
<?php
$myXMLData = "<?xml version='1.0' encoding='UTF-8'?>\n" .
"<note>\n" .
"<to>Tove</to>\n" .
"<from>Jani</from>\n" .
"<heading>Reminder</heading>\n" .
"<body>Don't forget me this weekend!</body>\n" .
"</note>";
$xml = simplexml_load_string($myXMLData) or die("Error: Cannot create object");
print_r($xml);
?>
رسیدگی به خطا با libxml
گاهی XML خراب است. بنابراین با libxml_use_internal_errors(true) خطاها را جمع کن و سپس نمایش بده.
<?php
libxml_use_internal_errors(true);
$myXMLData = "<?xml version='1.0' encoding='UTF-8'?>\n" .
"<document>\n" .
"<user>John Doe</wronguser>\n" .
"<email>john@example.com</wrongemail>\n" .
"</document>";
$xml = simplexml_load_string($myXMLData);
if ($xml === false) {
echo "Failed loading XML: ";
foreach (libxml_get_errors() as $error) {
echo "<br>" . $error->message;
}
} else {
print_r($xml);
}
?>
خواندن XML از فایل
برای فایل، از simplexml_load_file() استفاده کن. سپس خروجی را مثل آبجکت پیمایش کن.
<?php
$xml = simplexml_load_file("note.xml") or die("Error: Cannot create object");
print_r($xml);
?>
گام های عملی
- منبع XML را تعیین کن؛ رشته یا فایل.
- تابع مناسب را صدا بزن؛
load_stringیاload_file. - در صورت نیاز، خطاها را با libxml بررسی کن.
نکته: SimpleXML برای خواندن سریع عالی است؛ اما برای کنترل های پیچیده، DOM یا XMLReader را بسنج.
ادامه مسیر
- تجزیه گرهای XML (XML Parsers) برای انتخاب روش درست.
- SimpleXML: گرفتن مقادیر برای دسترسی به نودها و ویژگی ها.
جمع بندی سریع
- SimpleXML درخت محور و خواندنش بسیار ساده است.
load_stringبرای رشته،load_fileبرای فایل است.- برای خطاها از libxml کمک بگیر.
- نیاز پیچیده داری؟ DOM یا XMLReader را بررسی کن.