PHP Data Format & Types
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 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 < 1000</message>
নিম্নে এই পাঁচটি special Character এর entity reference টেবিল দেওয়া হলো :
< < less than > > greater than & & ampersand ' ‘ apostrophe " “ 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 টি ঠিক নিচের মতো দেখতে পাবেন :
উপরের কোডের asXML() function call করার সময় তার Parameter হিসেবে একটি xml file এর নাম দিয়ে দিলেই হবে। নিচের উদাহরণ দেখুন : এখন আপনার server test.xml নামে একটা file তৈরী হয়ে যাবে। এবং test.xml ফাইল এর কোড গুলো নিচের image এর মতো হবে। https://blog.w3programmers.com/zend-certified-php-engineering-zcpe-course/ simpleXML extension দিয়ে XML Element গুলোতে access করতে হলে আপনাকে SimpleXMLElement class থেকে new দিয়ে একটা নতুন Object তৈরী করতে হবে। তারপর সেই Object দিয়ে আপনাকে Property গুলোতে access করতে হবে। নিচের উদাহরণ দেখুন : Output এখন আপনি প্রত্যেকটি property ধরেই value গুলোতে access করতে পারেন। নিচের উদাহরণ দেখুন: Output আবার আপনি চাইলে foreach loop দিয়ে প্রত্যেকটি value তে access করতে পারেন। নিচের উদাহরণ দেখুন: Output আবার আপনি চাইলে children() Method ব্যবহার করে foreach loop এর মধ্যে আপনার কোডকে আরো simple করতে পারেন। নিচের উদাহরণ দেখুন: Output XML File থেকে সরাসরি Data Retrieve করতে হলে আপনাকে simplexml_load_file() function টি ব্যবহার করতে হবে। আর simplexml_load_file() function টি আপনাকে সরাসরি একটা Object Return করবে। simplexml_load_file() ফাঙ্কশনের ব্যবহার বুঝতে হলে নিচের xml কোডকে test.xml নামে save করুন: এখন নিম্নে আমরা simplexml_load_file() function ব্যবহার করে test.xml file এর Content গুলো retrieve করব। Output https://blog.w3programmers.com/php-course/ simplexml_load_string ফাঙ্কশন দিয়ে যেকোনো xml string কে Object এ রূপান্তর করতে পারবেন। নিচের উদাহরণ দেখুন : Output
<?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");
?>
simpleXML extension দিয়ে কিভাবে XML Element গুলোতে 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>";
?>
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
)
)
)
<?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>";
?>
<?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 " $k : $v <br>";
}
}
}
}
}
?>
<?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 " $k : $v<br>";
}
}
}
?>
XML File থেকে কিভাবে সরাসরি Data Retrieve করা যায় ?
<?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>
<?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 " $k : $v<br>";
}
}
}
?>
simplexml_load_string() ফাঙ্কশনের কাজ কি?
<?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 " $k : $v <br>";
}
}
}
}
}
?>