کار با XML در PHP

پارس و تولید XML در PHP — SimpleXML، DOMDocument و تبدیل بین XML و آرایه

XML چیست؟

XML (eXtensible Markup Language) فرمتی برای ذخیره و انتقال داده‌هاست. شبیه HTML است، اما برای داده‌ها طراحی شده.

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user>
        <name>علی</name>
        <age>25</age>
    </user>
    <user>
        <name>مریم</name>
        <age>22</age>
    </user>
</users>

SimpleXML — ساده‌ترین روش

PHP کلاس SimpleXMLElement برای کار با XML دارد:

خواندن XML از رشته

<?php
$xmlString = '<?xml version="1.0"?>
<users>
    <user>
        <name>علی</name>
        <age>25</age>
    </user>
</users>';

$xml = simplexml_load_string($xmlString);

echo $xml->user[0]->name;  // علی
echo $xml->user[0]->age;   // 25
?>

خواندن XML از فایل

<?php
$xml = simplexml_load_file("data.xml");
// یا
$xml = simplexml_load_string(file_get_contents("data.xml"));
?>

پیمایش XML

<?php
$xml = simplexml_load_string($xmlString);

foreach ($xml->user as $user) {
    echo $user->name . " - " . $user->age . "<br>";
}
?>

دسترسی به ویژگی‌ها (Attributes)

<?php
// XML: <user id="1" role="admin"><name>علی</name></user>
$xml = simplexml_load_string($xmlString);

echo $xml->user['id'];    // 1
echo $xml->user['role'];  // admin

// یا با آرایه
$attrs = $xml->user->attributes();
echo $attrs['id'];
?>

تولید XML با SimpleXML

<?php
// ساخت XML جدید
$xml = new SimpleXMLElement('<?xml version="1.0"?><users></users>');

$user = $xml->addChild("user");
$user->addChild("name", "علی");
$user->addChild("age", 25);
$user->addAttribute("id", 1);

echo $xml->asXML();
?>

DOMDocument — کنترل بیشتر

<?php
$dom = new DOMDocument("1.0", "UTF-8");
$dom->formatOutput = true;  // خروجی مرتب

$users = $dom->createElement("users");
$dom->appendChild($users);

$user = $dom->createElement("user");
$user->setAttribute("id", "1");

$name = $dom->createElement("name", "علی");
$user->appendChild($name);

$users->appendChild($user);

echo $dom->saveXML();
?>

تبدیل XML به آرایه

<?php
function xmlToArray($xml) {
    $json = json_encode($xml);
    return json_decode($json, true);
}

$xml = simplexml_load_string($xmlString);
$array = xmlToArray($xml);
print_r($array);
?>

تبدیل آرایه به XML

<?php
function arrayToXml($data, &$xml) {
    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $subnode = $xml->addChild($key);
            arrayToXml($value, $subnode);
        } else {
            $xml->addChild($key, htmlspecialchars($value));
        }
    }
}

$data = [
    "user" => [
        "name" => "علی",
        "age" => 25
    ]
];

$xml = new SimpleXMLElement('<root/>');
arrayToXml($data, $xml);
echo $xml->asXML();
?>

SimpleXML vs DOMDocument

ویژگیSimpleXMLDOMDocument
سادگی✅ بسیار سادهپیچیده‌تر
کنترلکم✅ زیاد
سرعت✅ سریعکندتر
اعتبارسنجی❌✅ DTD/Schema
XPath✅✅

XPath — جستجوی پیشرفته

<?php
$xml = simplexml_load_string($xmlString);

// همه کاربرانی که سن > 20 است
$adults = $xml->xpath("//user[age > 20]");

foreach ($adults as $user) {
    echo $user->name;
}
?>

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

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