XCVIII. SimpleXML functions
Introduction
Warning
This extension is EXPERIMENTAL. The behaviour of this extension
-- including the names of its functions and anything else
documented about this extension -- may change without notice
in a future release of PHP. Use this extension at your own
risk.
The SimpleXML extension provides a very simple and easily
usable toolset to convert XML to an object that can be processed
with normal property selectors and array iterators.
Installation
This extension is only available if PHP was configured with
--enable-simplexml. The PHP configuration script does this
by default.
Examples
Many examples in this reference require an XML string. Instead
of repeating this string in every example, we put it into
a file which we include in each example. This included file
is shown in the following example section. Alternatively,
you could create an XML document and read it with simplexml_load_file().
Example 1. Include file example.php with XML string
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El ActÓr</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or
is it a
scripting language? All is revealed in this thrilling horror
spoof
of a documentary.
</plot>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;?>
The simplicity of SimpleXML appears most clearly when one
extracts a string or number from a basic XML document. Example
2. Getting <plot>
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
echo $xml->movie[0]->plot; // "So this language.
It's like..."
?>
Example 3. Accessing non-unique elements in SimpleXML
When multiple instances of an element exist as children
of a single parent element, normal iteration techniques
apply.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
/* For each <movie> node, we echo a separate <plot>.
*/
foreach ($xml->movie as $movie) {
echo $movie->plot, '<br />';
}
?>
Example 4. Using attributes
So far, we have only covered the work of reading element
names and their values. SimpleXML can also access element
attributes. Access attributes of an element just as you
would elements of an array.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
/* Access the <rating> nodes of the first movie.
* Output the rating scale, too. */
foreach ($xml->movie[0]->rating as $rating) {
switch((string) $rating['type']) { // Get attributes as
element indices
case 'thumbs':
echo $rating, ' thumbs up';
break;
case 'stars':
echo $rating, ' stars';
break;
}
}
?>