2004-01-23 16:17:17 +00:00
|
|
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
2004-08-17 05:14:45 +00:00
|
|
|
<!-- $Revision: 1.13 $ -->
|
2004-01-23 16:17:17 +00:00
|
|
|
<reference id="ref.simplexml">
|
|
|
|
<title>SimpleXML functions</title>
|
|
|
|
<titleabbrev>SimpleXML</titleabbrev>
|
|
|
|
|
|
|
|
<partintro>
|
|
|
|
<section id="simplexml.intro">
|
|
|
|
&reftitle.intro;
|
|
|
|
&warn.experimental;
|
|
|
|
<para>
|
|
|
|
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.
|
|
|
|
</para>
|
|
|
|
</section>
|
2004-08-17 05:14:45 +00:00
|
|
|
|
|
|
|
<section id="simplexml.requirements">
|
|
|
|
&reftitle.required;
|
2004-01-23 16:17:17 +00:00
|
|
|
<para>
|
2004-08-17 05:14:45 +00:00
|
|
|
The SimpleXML extension requires PHP 5.
|
2004-01-23 16:17:17 +00:00
|
|
|
</para>
|
|
|
|
</section>
|
2004-08-17 05:14:45 +00:00
|
|
|
|
|
|
|
&reference.simplexml.configure;
|
|
|
|
|
2004-01-23 16:17:17 +00:00
|
|
|
<section id="simplexml.examples">
|
|
|
|
&reftitle.examples;
|
|
|
|
<para>
|
|
|
|
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 <function>simplexml_load_file</function>.
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
<example>
|
|
|
|
<title>Include file example.php with XML string</title>
|
2004-01-24 19:20:35 +00:00
|
|
|
<programlisting role="php" id="simplexml.examples.movie">
|
2004-01-23 16:17:17 +00:00
|
|
|
<![CDATA[
|
|
|
|
<?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>
|
2004-03-10 06:33:25 +00:00
|
|
|
<actor>El ActÓr</actor>
|
2004-01-23 16:17:17 +00:00
|
|
|
</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;
|
|
|
|
?>
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
The simplicity of SimpleXML appears most clearly when one extracts
|
|
|
|
a string or number from a basic XML document.
|
|
|
|
<example>
|
|
|
|
<title>Getting <literal><plot></literal></title>
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
|
<?php
|
|
|
|
include 'example.php';
|
|
|
|
|
|
|
|
$xml = simplexml_load_string($xmlstr);
|
|
|
|
|
|
|
|
echo $xml->movie[0]->plot; // "So this language. It's like..."
|
|
|
|
?>
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
<example>
|
|
|
|
<title>Accessing non-unique elements in SimpleXML</title>
|
|
|
|
<simpara>
|
|
|
|
When multiple instances of an element exist as children of
|
|
|
|
a single parent element, normal iteration techniques apply.
|
|
|
|
</simpara>
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
|
<?php
|
|
|
|
include 'example.php';
|
|
|
|
|
|
|
|
$xml = simplexml_load_string($xmlstr);
|
|
|
|
|
2004-01-24 19:20:35 +00:00
|
|
|
/* For each <movie> node, we echo a separate <plot>. */
|
2004-02-06 17:39:57 +00:00
|
|
|
foreach ($xml->movie as $movie) {
|
|
|
|
echo $movie->plot, '<br />';
|
2004-01-23 16:17:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
?>
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
<example>
|
|
|
|
<title>Using attributes</title>
|
|
|
|
<simpara>
|
|
|
|
So far, we have only covered the work of reading element names
|
|
|
|
and their values. SimpleXML can also access element attributes.
|
2004-02-06 20:18:39 +00:00
|
|
|
Access attributes of an element just as you would elements
|
2004-02-06 17:39:57 +00:00
|
|
|
of an <type>array</type>.
|
2004-01-23 16:17:17 +00:00
|
|
|
</simpara>
|
|
|
|
<programlisting role="php">
|
|
|
|
<![CDATA[
|
|
|
|
<?php
|
|
|
|
include 'example.php';
|
|
|
|
|
|
|
|
$xml = simplexml_load_string($xmlstr);
|
|
|
|
|
|
|
|
/* Access the <rating> nodes of the first movie.
|
2004-01-30 23:38:06 +00:00
|
|
|
* Output the rating scale, too. */
|
|
|
|
foreach ($xml->movie[0]->rating as $rating) {
|
2004-03-10 06:33:25 +00:00
|
|
|
switch((string) $rating['type']) { // Get attributes as element indices
|
2004-01-23 16:17:17 +00:00
|
|
|
case 'thumbs':
|
|
|
|
echo $rating, ' thumbs up';
|
|
|
|
break;
|
|
|
|
case 'stars':
|
|
|
|
echo $rating, ' stars';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|
2004-03-10 06:33:25 +00:00
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
<example>
|
|
|
|
<title>Comparing Elements and Attributes with Text</title>
|
|
|
|
<simpara>
|
2004-03-10 16:42:23 +00:00
|
|
|
To compare an element or attribute with a string or pass it into a
|
|
|
|
function that requires a string, you must cast it to a string using
|
|
|
|
<literal>(string)</literal>. Otherwise, PHP treats the element as an object.
|
2004-03-10 06:33:25 +00:00
|
|
|
</simpara>
|
|
|
|
<programlisting role="php"><![CDATA[
|
|
|
|
<?php
|
|
|
|
include 'example.php';
|
|
|
|
|
|
|
|
$xml = simplexml_load_string($xmlstr);
|
|
|
|
|
|
|
|
if ((string) $xml->movie->title == 'PHP: Behind the Parser') {
|
|
|
|
print 'My favorite movie.';
|
|
|
|
}
|
2004-03-10 16:42:23 +00:00
|
|
|
|
|
|
|
htmlentities((string) $xml->movie->title);
|
2004-03-10 06:33:25 +00:00
|
|
|
?>
|
2004-01-23 16:17:17 +00:00
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
<example>
|
2004-01-30 23:38:06 +00:00
|
|
|
<title>Using Xpath</title>
|
2004-01-23 16:17:17 +00:00
|
|
|
<simpara>
|
2004-01-30 23:38:06 +00:00
|
|
|
SimpleXML includes builtin <acronym>Xpath</acronym> support.
|
2004-01-23 16:17:17 +00:00
|
|
|
To find all <literal><character></literal> elements:
|
|
|
|
</simpara>
|
|
|
|
<programlisting role="php">
|
|
|
|
<![CDATA[
|
|
|
|
<?php
|
|
|
|
include 'example.php';
|
|
|
|
$xml = simplexml_load_string($xmlstr);
|
|
|
|
|
2004-02-06 17:39:57 +00:00
|
|
|
foreach ($xml->xpath('//character') as $character) {
|
|
|
|
echo $character->name, 'played by ', $character->actor, '<br />';
|
2004-01-23 16:17:17 +00:00
|
|
|
}
|
|
|
|
?>
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
<simpara>
|
|
|
|
'<literal>//</literal>' serves as a wildcard. To specify absolute
|
|
|
|
paths, omit one of the slashes.
|
|
|
|
</simpara>
|
|
|
|
</example>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
<example>
|
|
|
|
<title>Setting values</title>
|
|
|
|
<simpara>
|
|
|
|
Data in SimpleXML doesn't have to be constant. The object allows
|
|
|
|
for manipulation of all of its elements.
|
|
|
|
</simpara>
|
|
|
|
<programlisting role="php">
|
|
|
|
<![CDATA[
|
|
|
|
<?php
|
|
|
|
include 'example.php';
|
|
|
|
$xml = simplexml_load_string($xmlstr);
|
|
|
|
|
2004-07-18 17:02:11 +00:00
|
|
|
$xml->movie[0]->characters->character[0]->name = 'Miss Coder';
|
2004-01-23 16:17:17 +00:00
|
|
|
|
|
|
|
echo $xml->asXML();
|
|
|
|
?>
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
<simpara>
|
|
|
|
The above code will output a new XML document, just like the original,
|
2004-07-18 17:02:11 +00:00
|
|
|
except that the new XML will change Ms. Coder to Miss Coder.
|
2004-01-23 16:17:17 +00:00
|
|
|
</simpara>
|
|
|
|
</example>
|
|
|
|
</para>
|
2004-01-29 01:23:00 +00:00
|
|
|
<para>
|
|
|
|
<example>
|
|
|
|
<title>DOM Interoperability</title>
|
|
|
|
<simpara>
|
|
|
|
PHP has a mechanism to convert XML nodes between SimpleXML
|
|
|
|
and DOM formats. This example shows how one might change
|
|
|
|
a DOM element to SimpleXML.
|
|
|
|
</simpara>
|
|
|
|
<programlisting role="php">
|
|
|
|
<![CDATA[
|
|
|
|
<?php
|
|
|
|
$dom = new domDocument;
|
|
|
|
$dom->loadXML('<books><book><title>blah</title></book></books>');
|
2004-01-30 23:38:06 +00:00
|
|
|
if (!$dom) {
|
2004-01-29 01:23:00 +00:00
|
|
|
echo 'Error while parsing the document';
|
2004-01-29 02:09:12 +00:00
|
|
|
exit;
|
2004-01-29 01:23:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
$s = simplexml_import_dom($dom);
|
|
|
|
|
|
|
|
echo $s->book[0]->title;
|
|
|
|
?>
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
|
|
</para>
|
2004-01-23 16:17:17 +00:00
|
|
|
</section>
|
|
|
|
</partintro>
|
|
|
|
|
|
|
|
&reference.simplexml.functions;
|
|
|
|
|
|
|
|
</reference>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
|
|
|
mode: sgml
|
|
|
|
sgml-omittag:t
|
|
|
|
sgml-shorttag:t
|
|
|
|
sgml-minimize-attributes:nil
|
|
|
|
sgml-always-quote-attributes:t
|
|
|
|
sgml-indent-step:1
|
|
|
|
sgml-indent-data:t
|
|
|
|
indent-tabs-mode:nil
|
|
|
|
sgml-parent-document:nil
|
|
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
|
|
sgml-exposed-tags:nil
|
|
|
|
sgml-local-catalogs:nil
|
|
|
|
sgml-local-ecat-files:nil
|
|
|
|
End:
|
|
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
|
|
vim: et tw=78 syn=sgml
|
|
|
|
vi: ts=1 sw=1
|
|
|
|
-->
|
|
|
|
|