XML در سرور
تولید اسناد XML در سمت سرور با PHP — خروجی XML برای API و تبادل داده
چرا XML را در سرور تولید کنیم؟
در معماریهای وب، سرور معمولاً داده را بهصورت XML یا JSON به کلاینت میفرستد. تولید XML در سرور مزایایی دارد:
- کلاینت میتواند هر زبانی باشد (مرورگر، اپ موبایل، سرور دیگر)
- ساختار داده با DTD/Schema قابل اعتبارسنجی است
- پشتیبانی از سیستمهای قدیمی که فقط XML میفهمند
تولید XML با PHP — روش ساده
سادهترین راه، چاپ مستقیم متن XML با هدر مناسب است:
<?php
header("Content-Type: text/xml; charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo "<note>";
echo "<to>Ali</to>";
echo "<from>Sara</from>";
echo "<message>Remember the meeting!</message>";
echo "</note>";
حتماً هدر
Content-Type: text/xml را ست کنید وگرنه مرورگر خروجی را HTML فرض میکند!تولید XML از پایگاه داده
مثال واقعیتر — تبدیل رکوردهای MySQL به XML:
<?php
header("Content-Type: text/xml; charset=UTF-8");
$conn = new mysqli("localhost", "user", "pass", "shop");
$result = $conn->query("SELECT id, name, price FROM products");
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo "<products>\n";
while ($row = $result->fetch_assoc()) {
echo " <product id=\"" . $row['id'] . "\">\n";
echo " <name>" . htmlspecialchars($row['name']) . "</name>\n";
echo " <price>" . $row['price'] . "</price>\n";
echo " </product>\n";
}
echo "</products>";
همیشه داده کاربر را با
htmlspecialchars() ایمن کنید تا کاراکترهای خاص XML (&، <، >) ساختار سند را نشکنند — این کار از حمله XML Injection هم جلوگیری میکند!روش استاندارد: DOMDocument
روش تمیزتر، استفاده از DOMDocument است که خودش escape کردن را انجام میدهد:
<?php
$doc = new DOMDocument("1.0", "UTF-8");
$root = $doc->createElement("products");
$doc->appendChild($root);
$product = $doc->createElement("product");
$product->setAttribute("id", "101");
$name = $doc->createElement("name", "Laptop & Accessories"); // خودش escape میکند
$price = $doc->createElement("price", "999");
$product->appendChild($name);
$product->appendChild($price);
$root->appendChild($product);
header("Content-Type: text/xml; charset=UTF-8");
echo $doc->saveXML();
خروجی نهایی
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product id="101">
<name>Laptop & Accessories</name>
<price>999</price>
</product>
</products>
در درس «XML در PHP» این مباحث را عمیقتر با SimpleXML و DOMDocument دنبال میکنیم.
این مبحث بخشی از دوره آموزش کامل XML است.