XML در PHP

کار کامل با XML در PHP — SimpleXML، DOMDocument، XPath و تبدیل به JSON

PHP و XML

PHP یکی از بهترین پشتیبانی‌های XML را بین زبان‌ها دارد. در این درس مرور کامل می‌کنیم:

۱. خواندن با SimpleXML

// از فایل
$xml = simplexml_load_file("books.xml");

// از رشته
$xml = simplexml_load_string($xmlString);

// دسترسی زنجیره‌ای
echo $xml->book[0]->title;
echo $xml->book[0]['category'];   // ویژگی

// پیمایش
foreach ($xml->book as $book) {
    echo $book->title . ": " . $book->price . PHP_EOL;
}

۲. XPath در PHP

$xml = simplexml_load_file("books.xml");

// همه کتاب‌های وب
$webBooks = $xml->xpath('//book[@category="web"]');

// کتاب‌های گران
$expensive = $xml->xpath("//book[price>30]");

foreach ($expensive as $book) {
    echo $book->title . PHP_EOL;
}

۳. ساخت XML با SimpleXML

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><library/>');

$book = $xml->addChild("book");
$book->addAttribute("category", "programming");
$book->addChild("title", "XML Guide");
$book->addChild("price", "45");

$xml->asXML("library.xml");    // ذخیره در فایل
echo $xml->asXML();            // چاپ

۴. DOMDocument — قدرت کامل

$doc = new DOMDocument("1.0", "UTF-8");
$doc->formatOutput = true;   // خروجی مرتب با تورفتگی!

$root = $doc->createElement("library");
$doc->appendChild($root);

$book = $doc->createElement("book");
$book->setAttribute("id", "1");

$title = $doc->createElement("title", "XML Guide");
$book->appendChild($title);

$root->appendChild($book);
echo $doc->saveXML();

۵. ویرایش سند موجود

$doc = new DOMDocument();
$doc->load("books.xml");

// تغییر متن
$titles = $doc->getElementsByTagName("title");
$titles->item(0)->nodeValue = "عنوان جدید";

// حذف
$books = $doc->getElementsByTagName("book");
$node = $books->item(1);
$node->parentNode->removeChild($node);

$doc->save("books.xml");

۶. تبدیل XML به JSON

$xml = simplexml_load_string($xmlString);
$json = json_encode($xml, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;
ترفند json_encode با SimpleXML سریع‌ترین راه تبدیل XML به JSON در PHP است — برای APIهایی که ورودی XML و خروجی JSON دارند عالی است!

۷. تبدیل JSON به XML

function arrayToXml($data, SimpleXMLElement $xml) {
    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $child = $xml->addChild($key);
            arrayToXml($value, $child);
        } else {
            $xml->addChild($key, htmlspecialchars($value));
        }
    }
    return $xml;
}

$array = json_decode($jsonString, true);
$xml = arrayToXml($array, new SimpleXMLElement('<root/>'));
echo $xml->asXML();

۸. اعتبارسنجی با XSD

$doc = new DOMDocument();
$doc->load("books.xml");

if ($doc->schemaValidate("books.xsd")) {
    echo "سند معتبر است ✅";
} else {
    echo "سند نامعتبر است ❌";
}

۹. مدیریت خطا

libxml_use_internal_errors(true);

$xml = simplexml_load_string($badXml);

if ($xml === false) {
    foreach (libxml_get_errors() as $error) {
        echo "خطا در خط {$error->line}: {$error->message}" . PHP_EOL;
    }
    libxml_clear_errors();
}

انتخاب ابزار در PHP

کارابزار پیشنهادی
خواندن سادهSimpleXML
پرس‌وجوSimpleXML + xpath()
ساخت و ویرایش پیچیدهDOMDocument
فایل حجیمXMLReader
اعتبارسنجیDOMDocument + schemaValidate

این مبحث بخشی از دوره آموزش کامل XML است.

ابزارهای مرتبط