PHP DOM Part-1

PHP DOM Document (PHP DOM) কি?

PHP DOM হচ্ছে Cross Platform এবং Language Independent একটি Application Programming Interface যা HTML, XHTML অথবা XML Document কে একটি Tree আকারে তৈরী করে। একটি Document এর প্রতিটি Node কে ভিন্ন ভিন্ন Object হিসেবে উপস্থাপন করে। তাছাড়া এটি Document এর Structure তৈরির সুবিধা দেয়; এবং অন্যান্য প্রোগ্রাম যাতে সেই Document এর Structure, style ও content পরিবর্তন এবং সংরক্ষণ করতে পারে সেই সুবিধা দেয়। মূলত, এটা ওয়েব পেজকে বিভিন্ন ধরণের Scripting ও Programming Language গুলোর সাথে যুক্ত করে। PHP DOM কে PHP ও JavaScript এর মতো যেকোনো Scripting ল্যাঙ্গুয়েজ দিয়ে পরিবর্তন করা যায়।

PHP DOM
Document Object Model

PHP তে কিভাবে একটা HTML Code কে PHP DOM Document এ পরিবর্তন করবেন?

PHP তে একটা HTML Code কে DOM Document এ পরিবর্তন করতে হলে আপনাকে DOMDocument class থেকে new DOMDocument() লিখে একটা Object তৈরী করতে হবে। তারপর DOMDocument ক্লাসের loadHTML Method দিয়ে HTML Code কে Object এ রূপান্তর করতে হবে। নিচের উদাহরণটি দেখুন:

<?php
$students_info=<<<"students"

<!DOCTYPE html>
<html>
<head>
	<title>PHP DOMDocument</title>
</head>
<body>
	<h2>PHP DOMDocument Example</h2>
	<p>Welcome to PHP DOMDocument</p>

</body>
</html>
students;
$doc = new DOMDocument();
$doc->loadHTML($students_info);
echo "<pre>";
print_r($doc);
echo "</pre>";

Output

DOMDocument Object
(
    [doctype] => (object value omitted)
    [implementation] => (object value omitted)
    [documentElement] => (object value omitted)
    [actualEncoding] => 
    [encoding] => 
    [xmlEncoding] => 
    [standalone] => 1
    [xmlStandalone] => 1
    [version] => 
    [xmlVersion] => 
    [strictErrorChecking] => 1
    [documentURI] => 
    [config] => 
    [formatOutput] => 
    [validateOnParse] => 
    [resolveExternals] => 
    [preserveWhiteSpace] => 1
    [recover] => 
    [substituteEntities] => 
    [nodeName] => #document
    [nodeValue] => 
    [nodeType] => 13
    [parentNode] => 
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => 
    [nextSibling] => 
    [attributes] => 
    [ownerDocument] => 
    [namespaceURI] => 
    [prefix] => 
    [localName] => 
    [baseURI] => 
    [textContent] => PHP DOMDocument
	PHP DOMDocument Example
	Welcome to PHP DOMDocument
)

লাইন নম্বর ৩৭ এ লক্ষ্য করুন, এখানে অন্যান্য Document Property এর পাশাপাশি textContent Property তে আপনার সমগ্র html code এর string output টা দেখাচ্ছে। আর তাই এখন আপনি চাইলে শুধু text Output গুলো নিচের মতো করে print করতে পারবেন।

<?php
$students_info=<<<"students"

<!DOCTYPE html>
<html>
<head>
	<title>PHP DOMDocument</title>
</head>
<body>
	<h2>PHP DOMDocument Example</h2>
	<p>Welcome to PHP DOMDocument</p>

</body>
</html>
students;
$doc = new DOMDocument();
$doc->loadHTML($students_info);
echo $doc->textContent;

Output

PHP DOMDocument 
PHP DOMDocument Example 
Welcome to PHP DOMDocument

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

PHP তে কিভাবে একটা XML Code কে PHP DOM Document এ পরিবর্তন করবেন?

PHP তে একটা XML Code কে DOM Document এ পরিবর্তন করতে হলে আপনাকে DOMDocument class থেকে new DOMDocument() লিখে একটা Object তৈরী করতে হবে। তারপর DOMDocument ক্লাসের loadXML Method দিয়ে XML Code কে 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">  
           <district>Noakhali</district>  
           <thana>Begum Gonj</thana>  
           <post>3831</post>  
      </address>  
      <fathername>Karim Bapary</fathername>
  </student>  
</college>
XML;
 
$sxe = new DOMDocument($xml);
$sxe->loadXML($xml);
echo "<pre>";
print_r($sxe);
echo "</pre>";
?>

Output

DOMDocument Object
(
    [doctype] => 
    [implementation] => (object value omitted)
    [documentElement] => (object value omitted)
    [actualEncoding] => 
    [encoding] => 
    [xmlEncoding] => 
    [standalone] => 1
    [xmlStandalone] => 1
    [version] => 1.0
    [xmlVersion] => 1.0
    [strictErrorChecking] => 1
    [documentURI] => file:/C:/xampp/htdocs/fci1/
    [config] => 
    [formatOutput] => 
    [validateOnParse] => 
    [resolveExternals] => 
    [preserveWhiteSpace] => 1
    [recover] => 
    [substituteEntities] => 
    [nodeName] => #document
    [nodeValue] => 
    [nodeType] => 9
    [parentNode] => 
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => 
    [nextSibling] => 
    [attributes] => 
    [ownerDocument] => 
    [namespaceURI] => 
    [prefix] => 
    [localName] => 
    [baseURI] => file:/C:/xampp/htdocs/fci1/
    [textContent] =>   
    
      Nahida  
      Sultana  
      01722334412  
      nahida@abc.com  
        
           Noakhali  
           Begum Gonj  
           3831  
        
      Karim Bapary
)

PHP তে কিভাবে একটা HTML অথবা XML File কে DOM Document এ পরিবর্তন করবেন?

PHP তে একটা HTML File অথবা XML কে DOM Document এ পরিবর্তন করতে হলে আপনাকে DOMDocument class থেকে new DOMDocument() লিখে একটা Object তৈরী করতে হবে। তারপর DOMDocument ক্লাসের load Method দিয়ে HTML অথবা XML File কে Object এ রূপান্তর করতে হবে। চলুন প্রথমে দুটি file যথাক্রমে test.html এবং test.xml বানাই।

test.html

<!DOCTYPE html>
<html>
<head>
	<title>PHP DOMDocument</title>
</head>
<body>
	<h2>PHP DOMDocument Example</h2>
	<p>Welcome to PHP DOMDocument</p>
</body>
</html>

test.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>

এখন আমরা এই দুটি file কে DOM Document এ রূপান্তর করব। নিচের উদাহরণটি দেখুন:

<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("test.html");
echo "<pre>";
    print_r($doc);
echo "</pre>";
$doc->loadXMLFile("test.xml");
echo "<pre>";
    print_r($doc);
echo "</pre>";

Output

DOMDocument Object
(
    [doctype] => (object value omitted)
    [implementation] => (object value omitted)
    [documentElement] => (object value omitted)
    [actualEncoding] => 
    [encoding] => 
    [xmlEncoding] => 
    [standalone] => 1
    [xmlStandalone] => 1
    [version] => 1.0
    [xmlVersion] => 1.0
    [strictErrorChecking] => 1
    [documentURI] => file:/C:/xampp/htdocs/fci1/test.html
    [config] => 
    [formatOutput] => 
    [validateOnParse] => 
    [resolveExternals] => 
    [preserveWhiteSpace] => 1
    [recover] => 
    [substituteEntities] => 
    [nodeName] => #document
    [nodeValue] => 
    [nodeType] => 9
    [parentNode] => 
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => 
    [nextSibling] => 
    [attributes] => 
    [ownerDocument] => 
    [namespaceURI] => 
    [prefix] => 
    [localName] => 
    [baseURI] => file:/C:/xampp/htdocs/fci1/test.html
    [textContent] => 

	PHP DOMDocument


	PHP DOMDocument Example
	Welcome to PHP DOMDocument


)
DOMDocument Object
(
    [doctype] => 
    [implementation] => (object value omitted)
    [documentElement] => (object value omitted)
    [actualEncoding] => 
    [encoding] => 
    [xmlEncoding] => 
    [standalone] => 1
    [xmlStandalone] => 1
    [version] => 1.0
    [xmlVersion] => 1.0
    [strictErrorChecking] => 1
    [documentURI] => file:/C:/xampp/htdocs/fci1/test.xml
    [config] => 
    [formatOutput] => 
    [validateOnParse] => 
    [resolveExternals] => 
    [preserveWhiteSpace] => 1
    [recover] => 
    [substituteEntities] => 
    [nodeName] => #document
    [nodeValue] => 
    [nodeType] => 9
    [parentNode] => 
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => 
    [nextSibling] => 
    [attributes] => 
    [ownerDocument] => 
    [namespaceURI] => 
    [prefix] => 
    [localName] => 
    [baseURI] => file:/C:/xampp/htdocs/fci1/test.xml
    [textContent] =>   
    
      Nahida  
      Sultana  
      01722334412  
      nahida@abc.com  
        
           Noakhali  
           Begum Gonj  
           3831  
        
      Karim Bapary 
)

PHP তে কোনো HTML অথবা XML File এর Value গুলোকে Tag name দিয়ে print করা যাবে?

PHP তে কোনো HTML অথবা XML File এর Value গুলোকে Tag name দিয়ে print করতে হলে আপনাকে getElementsByTagName() মেথডটি ব্যবহার করতে হবে। নিচের উদাহরণটি দেখুন:

<?php
$doc = new DOMDocument();
$doc->load("test.html");
$content=$doc->getElementsByTagName("p");
foreach($content as $val){
	echo $val->nodeValue,"<br>";
}

Output

PHP Paragraph-1 
PHP Paragraph-2
PHP Paragraph-3

এবার একই কাজটি আমরা একটা HTML String এর উপর apply করব। নিচের উদাহরণ দেখুন:

<?php
$html=<<<"html"
<!DOCTYPE html>
<html>
<head>
  <title>PHP DOMDocument</title>
</head>
<body>
  <h2>PHP DOMDocument Example</h2>
  <p>PHP Paragraph-1 </p>
  <p>PHP Paragraph-2</p>
  <p>PHP Paragraph-3</p>
</body>
</html>
html;
$doc = new DOMDocument();
$doc->loadHTML($html);
$content=$doc->getElementsByTagName("p");
foreach($content as $val){
  echo $val->nodeValue,"<br>";
}

Output

PHP Paragraph-1 
PHP Paragraph-2
PHP Paragraph-3

একই ভাবে আপনি xml File থেকেও getElementsByTagName() মেথডটি ব্যবহার করে data retrieve করতে পারবেন । চলুন tag name দিয়ে xml file থেকে data retrieve করা বুঝার জন্য প্রথমে books.xml নামে একটা file তৈরী করি।

books.xml

<?xml version="1.0" encoding="utf-8"?>
<books>
 <book>Patterns of Enterprise Application Architecture</book>
 <book>Design Patterns: Elements of Reusable Software Design</book>
 <book>Clean Code</book>
</books>

এবার নিচের PHP Code টি লিখে রান করুন :

<?php
$dom = new DOMDocument;
$dom->load("books.xml");
$books = $dom->getElementsByTagName('book');
foreach ($books as $book) {
    echo $book->nodeValue,"<br>";
}
?>

Output

Patterns of Enterprise Application Architecture
Design Patterns: Elements of Reusable Software Design
Clean Code

লক্ষ্য করুন, আমরা book tag এর মধ্যে অবস্থিত সব গুলো element value পেয়েগেছি।

এবার একই কাজটি আমরা একটা xml String এর উপর apply করব। নিচের উদাহরণ দেখুন:

<?php
$xml = <<< XML
<?xml version="1.0" encoding="utf-8"?>
<books>
 <book>Patterns of Enterprise Application Architecture</book>
 <book>Design Patterns: Elements of Reusable Software Design</book>
 <book>Clean Code</book>
</books>
XML;

$dom = new DOMDocument;
$dom->loadXML($xml);
$books = $dom->getElementsByTagName('book');
foreach ($books as $book) {
    echo $book->nodeValue,"<br>";
}
?>

Output

Patterns of Enterprise Application Architecture
Design Patterns: Elements of Reusable Software Design
Clean Code

PHP তে কোনো HTML অথবা XML এর Value গুলোকে id ধরে print করা যাবে?

PHP তে কোনো HTML অথবা XML এর Value গুলোকে id ধরে print করতে হলে আপনাকে getElementById() মেথডটি ব্যবহার করতে হবে। চলুন প্রথমে html এর উদাহরণটি দেখা যাক :

<?php
$html=<<<"html"
<!DOCTYPE html>
<html>
<body>
  <h2>PHP DOMDocument Example</h2>
  <p id="y">PHP Paragraph-1 </p>
  <p id="x">PHP Paragraph-2</p>
</body>
</html>
html;
$dom = new DOMDocument();
$dom->validateOnParse = true; //<!-- this first
$dom->loadHTML($html);        //'cause 'load' == 'parse

$dom->preserveWhiteSpace = false;
echo $dom->getElementById("y")->nodeValue,"<br>";
echo $dom->getElementById("x")->nodeValue;

Output

PHP Paragraph-1 
PHP Paragraph-2

এবার আমরা চলুন xml string এর উদাহরণটি দেখব :

<?php
$xml=<<<"xml"
<!DOCTYPE books [
  <!ATTLIST book    id           ID     #IMPLIED>
]>
<books>
  <book id="php-basics">
    <title>PHP Basics</title>
    <author>Jim Smith</author>
  </book>
  <book id="php-advanced">
    <title>PHP Advanced Programming Part-1</title>
    <author>Masud Alam</author>
  </book>
</books>
xml;
$doc = new DOMDocument();
$doc->loadXML($xml);
echo $doc->getElementById("php-advanced")->nodeValue;

Output

PHP Advanced Programming Part-1 
Masud Alam

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম 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