SimpleXML چیست

PHP چندین روش برای تجزیه فایل های XML ارائه می دهد که معمولترین آنها استفاده از SimpleXML است. SimpleXML تمام محتویات فایل XML را خوانده و ان را تبدیل به آرایه ای از اشیاء می کند. امتیاز SimpleXML این است که برای خواندن محتویات فایل XML نیاز به کدنویسی ندارید. قبل از شروع به یادگیری SimpleXML نگاهی به برخی از متدهای پرکاربرد آن می اندازیم :

 

توابع SimpleXML

تابع توضیح
__construct() یک شیء جدید از SimpleXMLElement ایجاد می کند.
addAttribute() یک خاصیت به عنصر خاص اضافه می کند.
addChild() یک زیر گره به یک گره خاص اضافه می کند.
asXML() فایل XML را در قالب یک رشته بر می گرداند.
attributes() خاصیت ها/مقادیر یک عنصر را بر می گرداند.
children() گره های فرزند یک گره خاص را بر می گرداند.
count() تعداد زیر گره های یک گره خاص را می شمارد.
getDocNamespaces() فضای نام تعریف شده در سند را بر می گرداند.
getName() نام گره XML را بر می گرداند.
getNamespaces() فضای نام استفاده شده در سند را بر می گرداند.
saveXML() مترادف asXML()
simplexml_load_file() یک فایل XML را به شیء SimpleXMLElement تبدیل می کند.
simplexml_load_string() یک رشته XML را به شیء SimpleXMLElement تبدیل می کند.

 

توابع گردش در SimpleXML

تابع توضیح
current() گره جاری را بر می گرداند.
getChildren() زیرگره های گره جاری را بر می گرداند.
hasChildren() چک می کند که آیا گره جاری دارای زیر گره ای است یا نه؟
key() کلید جاری را بر می گرداند.
next() حرکت به سمت گره بعدی
rewind() رفتن به عنصر اولی
valid() چک می کند که آیا گره جاری معتبر است یا نه؟

 

فرض کنید می خواهیم همان فایل XML درس قبل را با استفاده از SimpleXml ایجاد کنیم :

   1:<?php
   2:    $DOM =<<<XML
   3:    <?xml version="1.0"?>
   4:    <Persons>
   5:      <Person name="John Smith">
   6:        <Age>30</Age>
   7:        <Gender>Male</Gender>
   8:      </Person>
   9:      <Person name="Mike Folly">
  10:        <Age>25</Age>
  11:        <Gender>Male</Gender>
  12:      </Person>
  13:      <Person name="Lisa Carter">
  14:        <Age>22</Age>
  15:        <Gender>Female</Gender>
  16:      </Person>
  17:    </Persons>
  18:    XML;
  19:
  20:    $xml=new SimpleXMLElement($DOM);
  21:    $xml->saveXML('myXMLFile.xml');
  22:?>

همانطور که در کد بالا مشاهده می کنید تنها کاری که ما انجام داده ایم این است که ساختار مورد نظرمان را در داخل یک رشته (خطوط 18-2) نوشته و سپس به سازنده کلاس SimpleXMLElement (خط 20) ارسال و در نهایت با استفاده از متد ()saveXML ذخیره کرده ایم. به همین راحتی! با این اجرای کد بالا فایل XML مورد نظرمان ایجاد می شود. همانطور که در کد بالا مشاهده می کنید گره اصلی (Persons) شامل سه گره فرزند (Person) است و هر گره فرزند خود دارای سه گره فرزند Name،Age و Gender می باشد.

 

بارگذاری یا Load فایل XML

برای خواندن فایل XML از متد ()simplexml_load_file استفاده می شود :

<?php
    $Persons = simplexml_load_file('c:/wamp/www/Tuts/myXMLFile.xml');
    echo '<pre>';
    print_r($Persons);
    echo '</pre>';
?>
SimpleXMLElement Object
(
    [Person] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [name] => John Smith
                        )

                    [Age] => 30
                    [Gender] => Male
                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [name] => Mike Folly
                        )

                    [Age] => 25
                    [Gender] => Male
                )

            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [name] => Lisa Carter
                        )

                    [Age] => 22
                    [Gender] => Female
                )

        )

)

همانطور که در خروجی بالا مشاهده می کنید گره یا عنصر اصلی (Persons) آرایه ای از اشیاء Person است. که این آرایه خود دارای سه عنصر می باشد. که این عناصر همان گره های موجود در فایل XML هستند. هر عنصر در این آرایه یک شی است که شامل خاصیت های Name، Age و Gender می باشد. با این فایل XML در درس های آینده کار می کنیم.

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر مطرح بفرمایید.