PHP Professional এবং Zend Certified PHP Engineer (ZCPE ) Course এ সীমিত সংখ্যক আসন বাকি আছে। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

XML with PHP Part-2

php xml

php xml

XML with PHP এর দ্বিতীয় পর্বে আপনাকে স্বাগতম , এই পর্বে আমরা দেখবো সম্পূর্ণ XML string থেকে নির্দিষ্ট অংশ নিয়ে কিভাবে নতুন XML তৈরী করবেন ? একটা xml file এ কিভাবে নতুন child element যোগ করবেন? XML File এর কোনো element এর attribute গুলো কিভাবে print করবেন? XML String কে কি JSON string এ রূপান্তর করা যাবে? XML এ xpath কি? এবং XML Namespaces কি?

সম্পূর্ণ XML string থেকে নির্দিষ্ট অংশ নিয়ে কিভাবে নতুন XML তৈরী করব?

সম্পূর্ণ XML string বা File থেকে কোনো নির্দিষ্ট অংশ নিয়ে নতুন XML file বা string তৈরী করতে হলে প্রথমে আপনাকে সেই নোডে (অংশে) access করতে হবে। তারপর asXML() function দিয়ে নতুন 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->student->address->asXML());
?>

Output

XML from XML

XML from 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->student->address->asXML("address.xml"));
?>

এখন শুধু address অংশ নিয়ে আপনার address.xml নামে একটা file তৈরী হয়ে যাবে।

একটা xml file এ কিভাবে নতুন child element যোগ করবেন?

একটা xml file এ নতুন child element যোগ করতে চাইলে প্রথমে আপনাকে xml file টিকে load করে নিতে হবে। তারপর addChild() Method দিয়ে child add করতে হবে এবং asXML Method দিয়ে save করতে হবে। নিচের উদাহরণ দেখুন:

<?php
$sxe = simplexml_load_file("test.xml");
$sxe->student->addChild("fathername","Karim Bapary");
echo $sxe->asXML("test.xml");
?>

এখন আপনার XML file টি হবে নিচের মতো :

<?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>  
      <fathername>Karim Bapary</fathername>
  </student>  
</college>

একটা xml Element এ কিভাবে নতুন attribute যোগ করবেন?

একটা xml Element এ নতুন attribute যোগ করতে হলে আপনাকে simpleXML ক্লাসের addAttribute() Method টি ব্যবহার করতে হবে। নিচের উদাহরণটি দেখুন:

<?php
$sxe = simplexml_load_file("test.xml");
$sxe->student->address->addAttribute("type","Present Address");
echo $sxe->asXML("test.xml");
?>

এখন আপনার address element এ type নামে একটা attribute দেখতে পাবেন , ঠিক নিচের মতো :

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

XML File এর কোনো element এর attribute গুলো কিভাবে print করবেন?

XML File এর কোনো element এর attribute কে print করতে হলে আপনাকে attributes() Method টি ব্যবহার করতে হবে। নিচের উদাহরণটি দেখুন :

<?php
$xml=<<<xml
<?xml version="1.0"?>
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address type="Present Address" title="Student Present Address">  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
      <fathername>Karim Bapary</fathername>
  </student>  
</college>
xml;
$sxe=simplexml_load_string($xml);
foreach($sxe->student->address->attributes() as $attribute=>$value){
    echo $attribute."=".$value,"<br>";
}
// you can also print individual attribute value

echo "<br><br>Print Individual Attribute Value<br>";
echo $sxe->student->address[0]->attributes();
?>

Output

Show Attribute name and Value using PHP Simple XML

Show Attribute name and Value using PHP Simple XML

XML String কে কি JSON string এ রূপান্তর করা যাবে?

হ্যাঁ, অবশ্যই XML String কে JSON string এ রূপান্তর করা যাবে, আর তা json_encode() function দিয়েই করা সম্ভব। আবার আপনি চাইলে XML String কে json_decode() function এর মাধ্যমে PHP array অথবা Object এ রূপান্তর করে নিতে পারবেন। নিচের উদাহরণ কয়টি লক্ষ্য করুন:

<?php
$xml=<<<xml
<?xml version="1.0"?>
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address type="Present Address" title="Student Present Address">  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
      <fathername>Karim Bapary</fathername>
  </student>  
</college>
xml;
$sxe=simplexml_load_string($xml);
echo "<h3>Converting XML to JSON String</h3>";
$str= json_encode($sxe);
echo $str;
echo "<h3>Converting JSON String to Object</h3>";
echo "<pre>";
print_r(json_decode($str));
echo "</pre>";
echo "<h3>Converting JSON String to Array</h3>";
echo "<pre>";
print_r(json_decode($str,true));
echo "</pre>";
?>

Output

Convert XML to JSON String

Convert XML to JSON String

Convert JSON String to Array

Convert JSON String to Array

Convert JSON String To Object

Convert JSON String To Object

XML Namespaces কি?

XML এর element গুলোর naming conflict এড়ানোর জন্য যেই পদ্ধতি অবলম্বন করা হয় , তাকে XML Namespaces বলে। আরেকটু ভালো ভাবে বুঝার জন্য নিচের উদাহরণটি দেখুন :

<table>
  <name>Nahida Sultana</name>
  <age>20</age>
  <address>Noakhali, Bangladesh</address>
</table>
<table>
  <name>Apple</name>
  <width>80</width>
  <length>120</length>
</table>

উপরে XML টিতে table নামে দুটি element থাকলেও তাদের Data এর ধরণ সম্পূর্ণ ভিন্ন , তাই স্বাভাবিক ভাবেই এখানে naming Conflict করবে। আর এর জন্য আমরা দুটি table কে দুটি ভিন্ন namespace দিয়ে দিবো। আর namespace দেওয়ার নিয়ম হচ্ছে, প্রথমে আপনার root element এ namespace name কি হবে তা define করা, তারপর প্রতিটা element সেই define করা namespace name কে call করা। নিচে সিনটেক্স এ লক্ষ্য করুন:

<rootElementName xmlns:namespaceName="http://yourNamespaceURL/namespaceName" xmlns:AnotherNamespaceName="http://yourAnotherNamespaceURL/AnotherNamespaceName">

<namespaceName:elementName>Value</namespaceName:elementName>
....
....
</rootElementName>

namespace কিভাবে define করতে হয় , তা তো জানলাম , এবার নিচের উদাহরণটি দেখুন:

<info xmlns:student="http://example.org/student" xmlns:fruit="http://example.org/fruit">
  <student:table>
  <student:name>Nahida Sultana</student:name>
  <student:age>20</student:age>
  <student:address>Noakhali, Bangladesh</student:address>
</student:table>
<fruit:table>
  <fruit:name>Apple</fruit:name>
  <fruit:width>80</fruit:width>
  <fruit:length>120</fruit:length>
</fruit:table>
</info>

কোনো XML এ কি কি namespace ডিক্লেয়ার হয়েছে এবং তাদের URL কি? তা কিভাবে জানা যাবে?

PHP তে কোনো XML এ কি কি namespace ডিক্লেয়ার হয়েছে এবং তাদের URL কি? তা জানতে হলে আপনাকে getDocNamespaces() Method টি ব্যবহার করতে হবে। নিচের উদাহরণ টি দেখুন :

<?php
$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<info xmlns:student="http://example.org/student" xmlns:fruit="http://example.org/fruit">
  <student:table>
  <student:name>Nahida Sultana</student:name>
  <student:age>20</student:age>
  <student:address>Noakhali, Bangladesh</student:address>
</student:table>
<fruit:table>
  <fruit:name>Apple</fruit:name>
  <fruit:width>80</fruit:width>
  <fruit:length>120</fruit:length>
</fruit:table>
</info>
XML;
 
$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getDocNamespaces(TRUE);
echo "<pre>";
print_r($namespaces);
echo "</pre>";
?>

Output

Array
(
    [student] => http://example.org/student
    [fruit] => http://example.org/fruit
)

কোনো XML এ কি কি namespace ব্যবহার হয়েছে এবং তাদের URL কি? তা কিভাবে জানা যাবে?

PHP তে কোনো XML এ কি কি namespace ব্যবহার হয়েছে এবং তাদের URL কি? তা জানতে হলে আপনাকে getNamespaces() Method টি ব্যবহার করতে হবে। নিচের উদাহরণ টি দেখুন :

<?php
$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<info xmlns:student="http://example.org/student" xmlns:fruit="http://example.org/fruit">
  <student:table>
  <student:name>Nahida Sultana</student:name>
  <student:age>20</student:age>
  <student:address>Noakhali, Bangladesh</student:address>
</student:table>
<fruit:table>
  <fruit:name>Apple</fruit:name>
  <fruit:width>80</fruit:width>
  <fruit:length>120</fruit:length>
</fruit:table>
</info>
XML;
 
$sxe = new SimpleXMLElement($xml);

$namespaces = $sxe->getNamespaces(true);
echo "<pre>";
print_r($namespaces);
echo "</pre>";

?>

Output

Array
(
    [student] => http://example.org/student
    [fruit] => http://example.org/fruit
)

XML এ xpath কি?

XML এর element এবং attribute গুলোতে সরাসরি access করার সহজ পদ্ধতির নাম হচ্ছে xpath.

PHP তে XML String কে xpath করা যাবে?

অবশ্যই করা যাবে , আর এর জন্য আপনাকে xpath() Method কে ব্যবহার করতে হবে। নিচের উদাহরণটি দেখুন :

<?php
$xml = <<<XML
<?xml version="1.0"?>
<college>  
  <student>  
      <firstname>Nahida</firstname>  
      <lastname>Sultana</lastname>  
      <contact>01722334412</contact>  
      <email>nahida@abc.com</email>  
      <address type="Present Address">  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
      <fathername>Karim Bapary</fathername>
  </student>  
</college>
XML;
 
$sxe = new SimpleXMLElement($xml);

$address=$sxe->xpath("student/address");
foreach($address as $addr){
  foreach($addr as $key=>$val){
    echo "$key: $val","<br>";
  }
}


?>

Output

district: Noakhali
thana: Begum Gonj
post: 3831

PHP তে XML String এর namespace কে xpath দিয়ে access করা যাবে?

অবশ্যই করা যাবে , আর এর জন্য আপনাকে registerXPathNamespace() Method কে ব্যবহার করতে হবে। নিচের উদাহরণটি দেখুন :

<?php

$xml = <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
    <title>My Book</title>
    <chapter id="1">
        <chap:title>Chapter 1</chap:title>
        <para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque. 
            In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci. 
            Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut, 
            ultricies id, mauris.</para>
    </chapter>
    <chapter id="2">
        <chap:title>Chapter 2</chap:title>
        <para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin 
            gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam 
            vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros 
            tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
    </chapter>
</book>
EOD;

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');

foreach ($result as $title) {
  echo $title . "\n";
}

?>

Output

Chapter 1
Chapter 2

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।

Leave a Reply

Your email address will not be published. Required fields are marked *