dcsimg
Login | Register   
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


advertisement
 

Accessing and Manipulating the DOM with PHP : Page 4

Discover how to create a DOM tree from scratch or modify an existing DOM tree using PHP 5.


advertisement

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


Importing Nodes

Use the importNode method to copy a node from another tree to the current tree:

DOMNode DOMDocument::importNode(DOMNode $importedNode [,bool $deep]): This method imports a node from another XML document and inserts it into the current document's DOM tree. The $importedNode argument specifies the node to import. The imported node represents a copy of the original node, so the import does not alter the external tree. The $deep argument controls whether the method imports a deep copy of the imported node. When TRUE, the method imports the entire node subtree; when FALSE, it imports only the node.



As an example, this next application imports the <continue> node from the Book_continue.xml file into Book.xml. First, here's the Book_continue.xml document contents:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!--chapter V--> <continue> <chapter_V> <title>XPath</title> <content>XPath is language for...</content> </chapter_V> <![CDATA[ This chaper is a bonus to... ]]> <printing cap_I="click_here_for_chapter_I" cap_II="click_here_for_chapter_II" cap_III="click_here_for_chapter_III" cap_IV="click_here_for_chapter_IV" cap_V="click_here_for_chapter_V" /> </continue>

And here's the code to import the <continue> node:

<?php $olddoc = new DOMDocument; $olddoc->load("Book_continue.xml"); // The node we want to import to a new document $node = $olddoc->getElementsByTagName("continue")->item(0); $newdoc = new DOMDocument; $newdoc->formatOutput = true; $newdoc->load("Book.xml"); // Import the node, and all its children, to the document $node = $newdoc->importNode($node, true); // And then append it to the root node $newdoc->documentElement->appendChild($node); echo "\nThe 'new document' after copying the nodes into it:\n"; $root = $newdoc->firstChild; function getNodesInfo($node) { if ($node->hasChildNodes()) { $subNodes = $node->childNodes; foreach ($subNodes as $subNode) { if (($subNode->nodeType != 3) || (($subNode->nodeType ==3) && (strlen(trim($subNode->wholeText))>=1))) { echo "Node name: ".$subNode->nodeName."\n"; echo "Node value: ".$subNode->nodeValue."\n"; } getNodesInfo($subNode); } } } getNodesInfo($root); ?>

Figure 7 shows the output from the preceding code.

 
Figure 7. Imported Node: Here's what Book.xml looks like after importing the node from the Book_continue.xml and placing it at the end of the Book.xml tree.

Checking Node Equality

To check whether two nodes are the same use the function isSameNode:

bool DOMNode::isSameNode(DOMNode $node): This function returns a Boolean TRUE when the nodes are equal, and FALSE otherwise. The $node argument represents the node to which you want to compare the current node.

Note that the comparison is not based on the content of the nodes.

//Checking if two nodes are equals $author1 = $root->getElementsByTagName('autor')->item(0); $author2 = $root->getElementsByTagName('autor')->item(1); //The verifyNodes function call verifyNodes($author1,$author2); function verifyNodes($currentNode, $node) { if (($currentNode->isSameNode($node))==true) { echo "These two nodes are the same"; } }

Creating a New Tree

You don't have to start with an existing tree; the DOM extension for PHP 5 lets you build trees from scratch. The following example creates a completely new XML document. It also uses two new functions that let you create a comment and CDATA nodes:

  • DOMComment DOMDocument::createComment(string $data): Create a new comment node. The $data argument represents the node content.
  • DOMCDATASection DOMDocument::createCDATASection(string $data): Create a new CDATA node. The $data argument represents the node content.

The example in Listing 2 creates an object tree and saves it as Flowers.xml.

The new Flower.xml document looks like this:

<?xml version="1.0" encoding="ISO-8859-1"?> <!--Beautiful flowers!!!--> <flowers> <tulips> <bulbs price="€ 7.65">Parrot</bulbs> <bulbs color="magenta">Lily flowering</bulbs> </tulips> </flowers> <![CDATA[<gladiolus> <species>Sword Lily</species> <species>Starface</species> </gladiolus> ]]>

This brief introduction to the DOM extension for PHP 5 should give you enough background to manipulate existing XML (or HTML) documents, or to create them from scratch.



Octavia Andreea Anghel is a senior PHP developer currently working as a primary trainer for programming teams that participate at national and international software-development contests. She consults on developing educational projects at a national level. She is a coauthor of the book "XML Technologies—XML in Java" (Albastra, ISBN 978-973-650-210-1), for which she wrote the XML portions. In addition to PHP and XML, she's interested in software architecture, web services, UML, and high-performance unit tests.
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date