آموزش کار با xml در PHP با مثال

xml یکی از فرمت‌های ذخیره‌سازی و انتقال اطلاعات در کامپیوتر است. در این آموزش ۲ تابع برای خواندن xml و یک روش جامع برای کار با XML در PHP را با مثال واقعی بررسی می‌کنیم.

ابتدا ساختار xml را با هم بررسی می‌کنیم. سپس نحوه خواندن و ساخت xml جدید در PHP را یاد می‌گیریم. به‌طور پیشفرض می‌توانیم از یک تابع و یک کلاس برای کار با xml استفاده کنیم.

کار با XML

فایل xml یک ساختار درختی از داده‌ها را در اختیار ما می‌گذارد. از این ساختار معمولاً برای ذخیره‌سازی و انتقال داده‌ها استفاده می‌شود. بعضی APIها نیز برای دریافت و نمایش اطلاعات از این فرمت استفاده می‌کنند. (علاوه بر json در PHP)

کدهای xml شباهت زیادی به تگ‌های html دارند. یعنی دارای تگ‌های باز و بسته هستند. اما ما می‌توانیم تگ‌های دلخواه (نام‌های دلخواه) در آن تعریف کنیم.

اجازه دهید کل آموزش را با یک مثال پیش ببرم. فرض کنید یک فایل xml برای نمایش (یا ذخیره‌سازی) اطلاعات کارمندانمان داریم. هر کارمند (employee) سه ویژگی دارد:

  • نام (name)
  • دپارتمانی که در آن کار می‌کند. (department)
  • موقعیت شغلی او (position)

یک نمونه از کدهای فایل xml ما چیزی شبیه به زیر خواهد بود:

<?xml version="1.0" encoding="utf-8"?>

<employees>

    <employee code = "7">
        <name>Omid</name>
        <position>Programmer</position>
        <department>Information Technology</department>
    </employee>
    <employee code = "11">
        <name>Mohsen</name>
        <position>CMO</position>
        <department>Marketing</department>
    </employee>
    <employee code = "15">
        <name>Negar</name>
        <position>CSM</position>
        <department>Customer Service</department>
    </employee>

</employees>

در ادامه سعی می‌کنیم همین فایل را بخوانیم و در بخش آخر آن را ایجاد کنیم.

خواندن XML در PHP

اگر جستجویی در اینترنت داشته باشید، احتمالاً قطعه کدهایی پیدا کنید که مخصوصاً برای دستکاری xml با php نوشته شده‌اند. قاعدتاً اگر نیاز خاصی داشته باشید، می‌توانید از آن‌ها استفاده کنید.

اگر اطلاعات در یک فایل xml وجود دارد، از تابع simplexml_load_file() استفاده می‌کنیم. فقط کافی است مسیر و نام فایل را به صورت یک رشته متنی در PHP تعریف کنیم. خروجی این تابع یک شیء از کلاس SimpleXMLElement یا در صورت بروز خطا false است.

<?php
$xml = simplexml_load_file('employees.xml');
?>

برای جلوگیری از خطاهای ناخواسته می‌توانید از try catch در php یا توابع بررسی وجود فایل در PHP (مثل file_exists()) استفاده کنید.

شیء $xml دارای ویژگی‌هایی به نام هر رکورد اطلاعاتی است. چون در مثال ما هر رکورد با تگ employee مشخص شده، نام این ویژگی employee است. اگر کارمندان را در تگ‌های item یا هر چیز دیگری قرار می‌دادیم، نام این ویژگی نیز تغییر می‌کرد.

این ویژگی یک آرایه چند بُعدی است. هر عضو این آرایه یکی از کارمندان را برای ما مشخص می‌کند. در قطعه کد زیر، کاربر اول را در خروجی نمایش می‌دهم:

<?php
$xml = simplexml_load_file('employees.xml');
print_r( $xml->employee[0] );
?>

از -> برای دسترسی به ویژگی (property) مورد نظر و [0] برای دسترسی به عضو اول آرایه PHP استفاده کرده‌ام. خروجی پرینت بالا چیزی شبیه به زیر را به ما می‌دهد: (نتیجه خواندن xml با php)

SimpleXMLElement Object (
    [@attributes] => Array(
            [code] => 7
        )

    [name] => Omid
    [position] => Programmer
    [department] => Information Technology
)

همانطور که می‌بینید، هر عضو به‌صورت یک شیء برگردانده می‌شود. بنابراین برای دسترسی به نام، دپارتمان و موقعیت شغلی باید مشابه اشیاء رفتار کنیم. اگر با اشیاء آشنا نیستید احتمالاً جلسه کلاس در PHP از دوره رایگان برایتان کاربردی باشد.

اگر کدهای xml درون یک متغیر قرار دارند (به‌جای فایل، یک رشته متنی هستند)، از تابع simplexml_load_string() استفاده می‌کنیم. این تابع رشته xml را گرفته و خروجی‌ای دقیقاً مشابه با خروجی بالا می‌دهد.

مثال پردازش xml با php

حال فرض کنید بخواهیم کارمندانمان را در یک لیست ساده نمایش دهیم. برای این کار از حلقه foreach در PHP استفاده می‌کنم.

<?php
$xml = simplexml_load_file('employees.xml');

echo "<ul>";
foreach($xml->employee as $employee){
    echo "<li>{$employee->name} ({$employee->position})</li>";
}
echo "</ul>";
?>
نمونه خروجی خواندن xml در حلقه foreach php
نمونه خروجی خواندن xml با حلقه در PHP

ایجاد XML با PHP

احتمالاً اولین راهی که برای ایجاد خروجی xml به نظرتان برسد، استفاده از echo یا ایجاد ساختار xml و ذخیره آن در یک فایل با فرمت .xml است. مشابه کاری که در ساختن فایل با PHP انجام دادیم.

علاوه بر این راهکارها، می‌توانیم از کلاس DOMDocument نیز استفاده کنیم. ابتدا باید یک سند با attributeهای موردنیاز ایجاد کنیم. سپس آیتم‌هایمان را به آن اضافه می‌کنیم.

در ادامه تلاش می‌کنم xml مثال ابتدای آموزش را با PHP سازم. بنابراین ابتدا شیء DOM و سپس ویژگی‌های اولیه‌اش را تعریف می‌کنم:

<?php
$dom = new DOMDocument();
$dom->encoding = 'utf-8';
$dom->xmlVersion = '1.0';
$dom->formatOutput = true;

$root = $dom->createElement('employees');

حالا آیتم اول (کارمند اول) را ایجاد و  به $root اضافه می‌کنم:

<?php
$employee = $dom->createElement('employee');
$employee->setAttributeNode( new DOMAttr('code', '7') );

// name
$name = $dom->createElement('name', 'Omid');
$employee->appendChild( $name );

// position
$position = $dom->createElement('position', 'Programmer');
$employee->appendChild( $position );

// department
$department = $dom->createElement('department', 'Information Technology');
$employee->appendChild( $department );

// append to root
$root->appendChild( $employee );

برای اینکه آموزش طولانی نشود، صرفاً یک نفر را اضافه کردم. به همین شکل شما می‌توانید هر چند تا آیتم که خواستید اضافه کنید. در نهایت باید $root را به $dom اضافه و نتیجه را ذخیره کنیم:

<?php
$dom->appendChild( $root );
$dom->save('sabzdanesh_example_employees.xml');

نتیجه نهایی همین قطعه کد، ساختار زیر است:

نمونه خروجی ساخت XML با PHP
محتوای فایل xml ساخته‌شده با PHP

شاید ایجاد xml با php برایتان کمی پیچیده به نظر برسید. اگر چند بار آن را مرور کنید و سعی کنید ۲ یا ۳ نمونه مشابه را برای خودتان ایجاد کنید، به راحتی گام‌های آن را به ذهن می‌سپارید.

امیدوارم بعد از این آموزش بتوانید با ساختار xml در PHP کار کنید. اگر سؤال یا تجربه‌ای در این موضوع دارید، بخش دیدگاه‌های این آموزش برای شماست! 🙂