کار با 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
| ویژگی | SimpleXML | DOMDocument |
|---|---|---|
| سادگی | ✅ بسیار ساده | پیچیدهتر |
| کنترل | کم | ✅ زیاد |
| سرعت | ✅ سریع | کندتر |
| اعتبارسنجی | ❌ | ✅ 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 است.