Xml Dom Parser In Php

PHP XML DOM :

The built-in DOM parser makes it possible to process XML documents in PHP.

What is DOM :

The W3C DOM provides a standard set of objects for HTML and XML documents, and a standard interface for accessing and manipulating them.

The W3C DOM is separated into different parts (Core, XML, and HTML) and different levels (DOM Level 1/2/3):

  • Core DOM - defines a standard set of objects for any structured document
  • XML DOM - defines a standard set of objects for XML documents
  • HTML DOM - defines a standard set of objects for HTML documents

XML Parsing :

To read and update - create and manipulate - an XML document, you will need an XML parser.

There are two basic types of XML parsers:

  • Tree-based parser : This parser transforms an XML document into a tree structure. It analyzes the whole document, and provides access to the tree elements
  • Event-based parser : Views an XML document as a series of events. When a specific event occurs, it calls a function to handle it

The DOM parser is an tree-based parser.

Look at the following XML document fraction:

CODE/PROGRAM/EXAMPLE
<?xml version="1.0" encoding="ISO-8859-1"?>
<from>Jani</from>

The XML DOM sees the XML above as a tree structure:

  • Level 1: XML Document
  • Level 2: Root element:
  • Level 3: Text element: "Jani"

DOM XML parser Installation :

The DOM XML parser functions are part of the PHP core. There is no installation needed to use these functions.

CODE/PROGRAM/EXAMPLE
//XML File :
The XML file below will be used in our example:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Do not forget me this weekend!</body>
</note>

Load and Output XML :

We want to initialize the XML parser, load the xml, and output it:

CODE/PROGRAM/EXAMPLE
//Example :
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
print $xmlDoc->saveXML();
?>
//  O/P : Tove Jani Reminder Do not forget me this weekend!

If you select "View source" in the browser window, you will see the following HTML:

CODE/PROGRAM/EXAMPLE
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Do not forget me this weekend!</body>
</note>

The example above creates a DOMDocument-Object and loads the XML from "note.xml" into it.

Then the saveXML() function to puts the internal XML document into a string, so that we can print it.

Looping through XML :

We want to initialize the XML parser, load the XML, and loop through all elements of the <note> element:

CODE/PROGRAM/EXAMPLE
Example
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
print $item->nodeName . " = " . $item->nodeValue . "<br />";
}
?>

//  O/P : #text =
to = Tove
#text =
from = Jani
#text =
heading = Reminder
#text =
body = Do not forget me this weekend!
#text =

In the example above you see that there are empty text nodes between each element.

When XML generates, it often contains white-spaces between the nodes. The XML DOM parser treats these as ordinary elements, and if you are not aware of them, they sometimes cause problems.

PHP SimpleXML :

SimpleXML handles the most common XML tasks and leaves the rest for other extensions.

What is SimpleXML:

SimpleXML is new in PHP 5. It is an easy way of getting an element's attributes and text, if you know the XML document's layout.

Compared to DOM or the Expat parser, SimpleXML just takes a few lines of code to read text data from an element.

SimpleXML converts the XML document into an object, like this:

  • Elements - Are converted to single attributes of the SimpleXMLElement object. When there's more than one element on one level, they're placed inside an array
  • Attributes - Are accessed using associative arrays, where an index corresponds to the attribute name
  • Element Data - Text data from elements are converted to strings. If an element has more than one text node, they will be arranged in the order they are found

SimpleXML is fast and easy to use when performing basic tasks like:

  • Reading XML files
  • Extracting data from XML strings
  • Editing text nodes or attributes

However, when dealing with advanced XML, like namespaces, you are better off using the Expat parser or the XML DOM.

Installation :

As of PHP 5.0, the SimpleXML functions are part of the PHP core. There is no installation needed to use these functions.

CODE/PROGRAM/EXAMPLE
Using SimpleXML
Below is an XML file:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Do not forget me this weekend!</body>
</note>

We want to output the element names and data from the XML file above.

Here's what to do:

  • Load the XML file
  • Get the name of the first element
  • Create a loop that will trigger on each child node, using the children() function
  • Output the element name and data for each child node
CODE/PROGRAM/EXAMPLE
//Example :
<?php
$xml = simplexml_load_file("test.xml");
echo $xml->getName() . "<br />";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br />";
}
?>

//  O/P : note
to: Tove
from: Jani
heading: Reminder
body: Do not forget me this weekend!
#xml_dom_parser_in_php #PHP_XML_DOM #What_is_DOM #XML_Parsing #DOM_XML_parser_Installation #Load_and_Output_XML #Looping_through_XML #PHP_SimpleXML #What_is_SimpleXML

(New page will open, for Comment)

Not yet commented...