XML DOM
XML Parsing
To read and update - create and process - an XML document, you need an XML parser.
There are two basic types of XML parsers:
· Tree-based parsers: This parser converts XML documents into a tree structure. It analyzes the entire document and provides access to elements in the tree, such as the Document Object Model (DOM).
· Time-based parser: Treat XML documents as a series of events. When a specific event occurs, the parser calls a function to handle it.
The DOM parser is a tree-based parser.
Please see the following XML document fragment:
<?xml version="1.0" encoding="ISO-8859-1"?>
<from>Jani< /from>
XML DOM Treats the above XML as a tree structure:
· Level 1: XML document
· Level 2: Root element: <from> ;
· Level 3: Text element: "Jani"
Installation
DOM XML parser functions are part of the core of PHP. No installation is required to use these functions.
XML file
The following XML file 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>Don't forget me this weekend!</body> </note>
Loading and outputting XML
We need to initialize the XML parser, load the XML, and output it:
Example
<?php $xmlDoc = new DOMDocument(); $xmlDoc->load("note.xml"); print $xmlDoc->saveXML(); ?>
The above code will output :
ToveJaniReminder Don't forget me this weekend!
If you view the source code in a browser window, you will see the following HTML:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
Example above Create a DOMDocument-Object and load the XML in "note.xml" into this document object.
The saveXML() function puts the internal XML document into a string so we can output it.
Traversing XML
We need to initialize the XML parser, load the XML, and traverse <note> ; All elements of the element:
Instance
<?php $xmlDoc = new DOMDocument(); $xmlDoc->load("note.xml"); $x = $xmlDoc->documentElement; foreach ($x->childNodes AS $item) { print $item->nodeName . " = " . $item->nodeValue . "<br>"; } ?>
The above code will output:
#text =
to = Tove
# text =
from = Jani
#text =
heading = Reminder
#text =
body = Don't forget me this weekend!
#text =
In the example above, you see that there are empty text nodes between each element.
When XML is generated, it will usually contain whitespace between nodes. The XML DOM parser treats them as normal elements, which can sometimes cause problems if you don't pay attention to them.