Basic simpleXML working example?

18,735

Solution 1

SimpleXML 101

  1. First of all, always name your PHP variables after the node they represent.

    // the root node is <programme/>
    $programme = simplexml_load_file("local.xml");
    
  2. Access to children (nodes) as if they were object properties.

    echo $programme->title;
    
  3. If there are multiple children using the same name, you can specify their 0-based position

    // first <title/> child
    echo $programme->title[0];
    
    // create or change the value of the second <title/> child
    $programme->title[1] = 'Second title';
    
  4. Access to attributes as if they were array keys

    // <mynode attr="attribute value" />
    echo $mynode['attr'];
    
  5. XPath always returns an array.


Back to your case, the best way to access that <title /> node would be

$programme = simplexml_load_file("local.xml");
echo "Title: " . $programme->title;

Solution 2

First of all, simplexml xpath method always returns an array of matches. Even if there is only 1 match (or even 0, in which case result is an empty array). This is why you get "Array" in the output.

Secondly, if you want just the title, then you need to change your xpath query:

$result = $xml->xpath("//programme/title");
echo "Title: " . $result[0] . "</br>";

Solution 3

You should probably change the xpath to //programme/title and then echo $result[0] or leave the xpath as it is and echo $result[0]->title. Remember var_dump will always help you.

Share:
18,735
andrebruton
Author by

andrebruton

IT Troubleshooter and PHP developer

Updated on June 04, 2022

Comments

  • andrebruton
    andrebruton almost 2 years

    It looks like there are many problems with simpleXML in PHP. I'm running the latest version of php on Windows and I just can not get the basic examples of simpleXML to work as in the documentation.

    My xml file is:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <programme> 
      <title>Billy Bushwaka</title> 
      <episodeNumber>2</episodeNumber> 
      <description>Billy Bushwaka entertains</description> 
      <url>play.swf</url> 
    </programme> 
    

    My PHP program is:

    <?php
    $xml = simplexml_load_file("local.xml");
    
    $result = $xml->xpath("//programme");
    echo "Title: " . $result . "</br>";
    ?>
    

    All I get is the following:

    Title: Array

    How can I get "Title: Billy Bushwaka"?

    There are no repeats of XML data so I do not want to use arrays.