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 با 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 کار کنید. اگر سؤال یا تجربهای در این موضوع دارید، بخش دیدگاههای این آموزش برای شماست! 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام و درود خدمت شما چظور باید از سایت های بورسی مثل تسه قیمت سهام را به php پیدا کرد ؟
سلام
روش اصلیش که استفاده از API هست؛ اگه اون سایت چنین امکانی رو در اختیار شما بذاره.
در حالت کلی هم میتونید از روشهای Web Scraping استفاده کنید؛ که هم با php میشه و اگر محدودیتی نداره با python هم امکانات خوبی رو دارید.