PHP XML Part-1

XML কি?

PHP XML: XML এর পূর্ণরূপ হচ্ছে, Extensible Markup Language. XML, HTML এর মতই একটি মার্কআপ ল্যঙ্গুয়েজ, তবে এটি কোন প্রোগ্রামিং ল্যঙ্গুয়েজ নয়। HTML এ যেমন Tag এবং attribute আছে, একইভাবে XML এ Tag এবং attribute আছে। পার্থক্য হচ্ছে, HTML এর Tag গুলো (যেমন body, h1, p ইত্যাদি) নির্দিষ্ট করা থাকে , আর xml এ আপনি নিজের ইচ্ছেমত element/tag বানাতে পারবেন। HTML এর সাথে XML এর বড় একটা পার্থক্য হচ্ছে XML এ attribute দিয়ে এলিমেন্টের ভিতর কি ডেটা আছে সেটা বর্ননা করা যায়, HTML এ এমন সুবিধা নেই। তাছাড়া HTML বানানো হয়েছে ব্রাউজারে Data প্রদর্শনের জন্য আর XML মুলত বানানো হয়েছে ডেটা সংরক্ষণ এবং এই ডেটা অন্য সিস্টেমের সাথে আদান প্রদান করার জন্য। ডেটা আদান প্রদানের জন্য XML, W3C ( World Wide Web Consortium ) এর রিকমেন্ডেশন। XML কি? নিচে তা point আকারে দেওয়া হলো :

  • XML ((eXtensible Markup Language)) হচ্ছে, Markup Language
  • XML কে তথ্য সংরক্ষণ এবং পরিবহন করার জন্য ডিজাইন করা হয়।
  • 90 এর শেষের দিকে XML প্রথম Release পায়। এটা স্ব বিবরণী (Self Describing) তথ্য ব্যবহার এবং সংরক্ষণকে সহজ করতে তৈরি করা হয়েছিল।
  • ১৯৯৮ সালের ফেব্রুয়ারী ১০ তারিখে XML প্রথম W3C (World Wide Web Consortium) এর রেকমেন্ডেশন পায়।
  • XML কে HTML এর পরিবর্তে ব্যবহারের জন্য তৈরী করা হয় নাই ।
  • XML কে Design করা হয়েছে স্ব-বর্ণনামূলক (self-desciptive) করার জন্য।
  • XML কে বানানো হয়েছে ডেটা সংরক্ষণ এবং এই ডেটা carry করার জন্য, ডেটা প্রদর্শনের জন্য নয়।
  • HTML এর মতো XML tag গুলো আগে থেকেই Predefined থাকেনা। আপনার নিজের ট্যাগগুলিকে অবশ্যই নিজেকেই সংজ্ঞায়িত (Defined) করতে হবে।
  • XML হচ্ছে platform independent এবং language independent.

XML Document কিভাবে তৈরী করা হয়?

XML Document কে তৈরি করা হয় hierarchical structure আকারে যা দেখতে একটা বৃক্ষের (Tree) মত। আর বৃক্ষটি হচ্ছে “রুট” এবং এর শাখাগুলি হচ্ছে গাছের ডালপালা থেকে একেবারে “পাতা” পর্যন্ত। নিচের Syntax টি দেখুন :

<?xml version="1.0" encoding="UTF-8"?>  
<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

Parent , Child এবং sibling শব্দ গুলোকে কে ব্যবহার করা হয় দুটি element এর মধ্যে সম্পর্ককে Describe করার জন্য। অর্থাৎ আমরা বলতে পারি, একটা Parents Elements এর যেমন Children থাকতে পারে, আবার একই লেভেলে একাধিক Children থাকে যেটাকে বলা হয় siblings (ভাই, বোন)। এবার নিচের XML টি লক্ষ্য করুন:

<?xml version="1.0" encoding="UTF-8"?> 
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>   

উপরের XML টি ঠিক নিচের মতো একটা Tree , যা self described:

XML Tree
XML Tree

XML Document লেখার কিছু আবশ্যকীয় নিয়ম:

  • সব XML Elements গুলোর অবশ্যই Closing Tag থাকতে হবে। যেমন:

    <root>
      <child>
        <subchild>.....</subchild>
      </child>
    </root>
    
  • সব XML Tag ই case sensitive, অর্থাৎ – এবং দুটিকে XML সম্পূর্ণ আলাদা ট্যাগ হিসেবে গ্রহণ করবে।যেমন:
    <message>This is correct</message>
    <message>This is Not Correct</Message>
    
  • XML Elements গুলো অবশ্যই Properly Nested হতে হবে। যেমন:
    <root>
      <child>
        <subchild>Invalid Nested</child>
       </subchild>
    </root>
    
    <root>
      <child>
        <subchild>Valid Nested</subchild>
      </child>
    </root>
    
  • XML Attribute এর মধ্যের Value গুলো অবশ্যই Quoted হতে হবে। যেমন:
    <?xml version="1.0" encoding="UTF-8"?>  
    <root date="12-2-18">
      <child>
        <subchild>.....</subchild>
      </child>
    </root>
    
  • XML Tag এর মধ্যে <,>,’,” এবং & এই পাঁচটি character এর পরিবর্তে তাদের entity reference দিতে হবে। অন্যথায় XML Parsing Error দেখাবে। যেমন,নিচের কোডটি parse error দেখাবে।
    <message>salary < 1000</message>
    

    তবে নিচের মতো entity reference দিয়ে লিখলে কোনো error দেখাবেনা।

    <message>salary &lt; 1000</message>
    

    নিম্নে এই পাঁচটি special Character এর entity reference টেবিল দেওয়া হলো :

    &lt; < less than
    &gt; > greater than
    &amp; & ampersand
    &apos; apostrophe
    &quot; quotation mark

https://blog.w3programmers.com/php-course/

PHP তে simpleXML কি?

PHP তে simpleXML হচ্ছে একটি built in extension যা দ্বারা খুব সহজে নতুন XML তৈরী এবং যেকোনো Valid XML এর Data কে Manipulate করা যায়। যা PHP 5 ভার্সন থেকে সাপোর্ট করে, এটাকে PHP XML Perser ও বলে।

simpleXML extension দিয়ে কিভাবে নতুন XML String তৈরী করা যায়?

PHP তে simpleXML extension দিয়ে নতুন XML String তৈরী করতে হলে আপনাকে SimpleXMLElement class থেকে new দিয়ে একটা নতুন Object তৈরী করতে হবে, এবং Object এর Constructor এ xml string কে pass করতে হবে। তারপর আপনার তৈরী করা Object দিয়ে asXML() Function কে কোনো parameter ছাড়া কল করতে হবে। নিচের উদাহরণটি দেখুন:

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = new SimpleXMLElement($xml);
print $sxe->asXML();
?>

উপরের code টি run করার পর আপনার ব্রাউজার এর source code টি ঠিক নিচের মতো দেখতে পাবেন :

Create XML using PHP SimpleXML Extension
Create XML using PHP SimpleXML Extension

simpleXML extension দিয়ে কিভাবে নতুন XML File তৈরী করা যায়?

উপরের কোডের asXML() function call করার সময় তার Parameter হিসেবে একটি xml file এর নাম দিয়ে দিলেই হবে। নিচের উদাহরণ দেখুন :

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = new SimpleXMLElement($xml);
print $sxe->asXML("test.xml");
?>

এখন আপনার server test.xml নামে একটা file তৈরী হয়ে যাবে। এবং test.xml ফাইল এর কোড গুলো নিচের image এর মতো হবে।

Create XML File Using PHP simpleXML Extension
Create XML File Using PHP simpleXML Extension

https://blog.w3programmers.com/zend-certified-php-engineering-zcpe-course/

simpleXML extension দিয়ে কিভাবে XML Element গুলোতে access করা যায়?

simpleXML extension দিয়ে XML Element গুলোতে access করতে হলে আপনাকে SimpleXMLElement class থেকে new দিয়ে একটা নতুন Object তৈরী করতে হবে। তারপর সেই Object দিয়ে আপনাকে Property গুলোতে access করতে হবে। নিচের উদাহরণ দেখুন :

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = new SimpleXMLElement($xml);
echo "<pre>";
print_r($sxe);
echo "</pre>";
?>

Output

SimpleXMLElement Object
(
    [student] => SimpleXMLElement Object
        (
            [firstname] => Nahida
            [lastname] => Sultana
            [contact] => 01722334412
            [email] => nahida@abc.com
            [address] => SimpleXMLElement Object
                (
                    [district] => Noakhali
                    [thana] => Begum Gonj
                    [post] => 3831
                )

        )

)

এখন আপনি প্রত্যেকটি property ধরেই value গুলোতে access করতে পারেন। নিচের উদাহরণ দেখুন:

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = new SimpleXMLElement($xml);
echo "Name: ".$sxe->student->firstname. " ". $sxe->student->lastname. "<br>";
echo "Contact: ".$sxe->student->contact. "<br>";
echo "Email: ".$sxe->student->email. "<br>";
echo "Address: ".$sxe->student->address->district.",".$sxe->student->address->thana.",".$sxe->student->address->post."<br>";
?>

Output

Access XML Element using PHP SimpleXML Element
Access XML Element using PHP SimpleXML Element

আবার আপনি চাইলে foreach loop দিয়ে প্রত্যেকটি value তে access করতে পারেন। নিচের উদাহরণ দেখুন:

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = new SimpleXMLElement($xml);
foreach($sxe->student as $property){

  if(is_object($property)){
    foreach($property as $key=>$val){
      echo "$key: $val<br>";
      if(is_object($val)){
      foreach($val as $k=>$v){
        echo "&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; $k : $v <br>";
      }
    }
    }
  }
}
?>

Output

XML Tree with Foreach Loop
XML Tree with Foreach Loop

আবার আপনি চাইলে children() Method ব্যবহার করে foreach loop এর মধ্যে আপনার কোডকে আরো simple করতে পারেন। নিচের উদাহরণ দেখুন:

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = new SimpleXMLElement($xml);
$children=$sxe->children()->children();
foreach($children as $key=>$val){
    echo "$key : $val<br>";
  if(is_object($val)){
    foreach($val as $k=>$v){
      echo "&nbsp;&nbsp;&nbsp;&nbsp;$k : $v<br>";

    }
   
  }

}
?>

Output

XML Tree with childeren function and Foreach Loop
XML Tree with Foreach Loop

XML File থেকে কিভাবে সরাসরি Data Retrieve করা যায় ?

XML File থেকে সরাসরি Data Retrieve করতে হলে আপনাকে simplexml_load_file() function টি ব্যবহার করতে হবে। আর simplexml_load_file() function টি আপনাকে সরাসরি একটা Object Return করবে। simplexml_load_file() ফাঙ্কশনের ব্যবহার বুঝতে হলে নিচের xml কোডকে test.xml নামে save করুন:

<?xml version="1.0"?>
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>

এখন নিম্নে আমরা simplexml_load_file() function ব্যবহার করে test.xml file এর Content গুলো retrieve করব।

<?php
$sxe = simplexml_load_file("test.xml");
$children=$sxe->children()->children();
foreach($children as $key=>$val){
    echo "$key : $val<br>";
  if(is_object($val)){
    foreach($val as $k=>$v){
      echo "&nbsp;&nbsp;&nbsp;&nbsp;$k : $v<br>";

    }
   
  }

}
?>

Output

import xml file using simple_xml_load_file() function
XML Tree with Foreach Loop

https://blog.w3programmers.com/php-course/

simplexml_load_string() ফাঙ্কশনের কাজ কি?

simplexml_load_string ফাঙ্কশন দিয়ে যেকোনো xml string কে Object এ রূপান্তর করতে পারবেন। নিচের উদাহরণ দেখুন :

<?php
$xml=<<<"xml"
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address>  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
  </student>  
</college>
xml;
$sxe = simplexml_load_string($xml);
foreach($sxe->student as $property){

  if(is_object($property)){
    foreach($property as $key=>$val){
      echo "$key: $val<br>";
      if(is_object($val)){
      foreach($val as $k=>$v){
        echo "&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; $k : $v <br>";
      }
    }
    }
  }
}
?>

Output

convert xml string to Object using simple_xml_load_string() function
XML Tree with Foreach Loop

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply