Serializing XML With PHP - Travelling In Reverse
(Page 8 of 10 )
Good things come in twos: Mickey and Donald, Tom and Jerry, yin and yang. It's no surprise then that XML_Serializer has a doppelganger of its own. Called XML_Unserializer, this class can take an XML document and convert it into a series of nested PHP structures, suitable for use in a PHP script.
In order to understand how this works, consider the following XML document:
<?xml version='1.0'? >
<library>
<book id="MFRE001">
<title>The Adventures of Sherlock Holmes</title>
<author>Arthur Conan Doyle</author>
<price currency="USD">24.95</price>
</book>
<book id="MFRE002">
<title>Life of Pi</title>
<author>Yann Martel</author>
<price currency="USD">7.99</price>
</book>
<book id="MFRE003">
<title>Europe on a Shoestring</title>
<author>Lonely Planet</author>
<price currency="USD">16.99</price>
</book>
</library>
Now, in order to convert this XML document into a PHP structure, simply put XML_Unserializer to work on it, as below:
<?php
// include class file
include("Unserializer.php");
// create object
$unserializer = &new XML_Unserializer();
// unserialize the document
$result = $unserializer->unserialize("library.xml", true);
// dump the result
$data = $unserializer->getUnserializedData();
print_r($data);
? >
Here, the unserialize() method accepts either a string containing XML data or an XML file (set the second argument to false or true depending on which one you are passing) and returns a PHP structure representing the XML document. Here's what the output looks like:
Array
(
[book] => Array
(
[0] => Array
(
[title] => The Adventures of Sherlock Holmes
[author] => Arthur Conan Doyle
[price] => 24.95
)
[1] => Array
(
[title] => Life of Pi
[author] => Yann Martel
[price] => 7.99
)
[2] => Array
(
[title] => Europe on a Shoestring
[author] => Lonely Planet
[price] => 16.99
)
)
)
Now, in order to access the title of the third book (for example), you would use the notation
$data
['book'][2]['title'];
which would return
Europe on a Shoestring
Note that XML_Unserializer uses the type hints generated in the serialization process to accurately map XML elements to PHP data types. If these hints are unavailable (as in the example above), XML_Unserializer will "guess" the type of each value. A look at the source code of the class reveals that "complex structures will be arrays and tags with only CData in them will be strings."
Next: Keeping It Simple >>
More PHP Articles
More By Vikram Vaswani, (c) Melonfire