simplexml-php-examples-basic-0

  • Examples
  • Basic SimpleXML usage

  • Basic SimpleXML usage
  • Basic SimpleXML usage

    Basic SimpleXML usage

    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&#211;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>
      <great-lines>
       <line>PHP solves all my web problems</line>
      </great-lines>
      <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';

    $movies = new SimpleXMLElement($xmlstr);

    echo $movies->movie[0]->plot;
    ?>

    The above example will output:

    
       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.
    
    

    Accessing elements within an XML document that
    contain characters not permitted under PHP’s naming convention
    (e.g. the hyphen) can be accomplished by encapsulating the element
    name within braces and the apostrophe.

    Example #3 Getting <line>

    <?php
    include 'example.php';

    $movies = new SimpleXMLElement($xmlstr);

    echo $movies->movie->{'great-lines'}->line;
    ?>

    The above example will output:

    PHP solves all my web problems
    

    Example #4 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';

    $movies = new SimpleXMLElement($xmlstr);

    /* For each <character> node, we echo a separate <name>. */
    foreach ($movies->movie->characters->character as $character) {
       echo 
    $character->name' played by '$character->actorPHP_EOL;
    }

    ?>

    The above example will output:

    Ms. Coder played by Onlivia Actora
    Mr. Coder played by El ActÓr
    

    Note:

    Properties ($movies->movie in previous
    example) are not arrays. They are iterable and accessible objects.

    Example #5 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';

    $movies = new SimpleXMLElement($xmlstr);

    /* Access the <rating> nodes of the first movie.
     * Output the rating scale, too. */
    foreach ($movies->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;
        }
    }
    ?>

    The above example will output:

    7 thumbs up5 stars
    

    Example #6 Comparing Elements and Attributes with
    Text

    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 (string). Otherwise, PHP treats the element as an
    object.

    <?php
    include 'example.php';

    $movies = new SimpleXMLElement($xmlstr);

    if ((string) $movies->movie->title == 'PHP: Behind the Parser') {
        print 
    'My favorite movie.';
    }

    echo htmlentities((string) $movies->movie->title);
    ?>

    The above example will output:

    My favorite movie.PHP: Behind the Parser
    

    Example #7 Comparing Two Elements

    Two SimpleXMLElements are considered different even if they
    point to the same element since PHP 5.2.0.

    <?php
    include 'example.php';

    $movies1 = new SimpleXMLElement($xmlstr);
    $movies2 = new SimpleXMLElement($xmlstr);
    var_dump($movies1 == $movies2); // false since PHP 5.2.0
    ?>

    The above example will output:

    bool(false)
    

    Example #8 Using XPath

    SimpleXML includes built-in XPath support. To find all
    <character> elements:

    <?php
    include 'example.php';

    $movies = new SimpleXMLElement($xmlstr);

    foreach ($movies->xpath('//character') as $character) {
        echo 
    $character->name' played by '$character->actorPHP_EOL;
    }
    ?>

    //‘ serves as a wildcard. To specify absolute paths,
    omit one of the slashes.

    The above example will output:

    Ms. Coder played by Onlivia Actora
    Mr. Coder played by El ActÓr
    

    Example #9 Setting values

    Data in SimpleXML doesn’t have to be constant. The object allows
    for manipulation of all of its elements.

    <?php
    include 'example.php';
    $movies = new SimpleXMLElement($xmlstr);

    $movies->movie[0]->characters->character[0]->name 'Miss Coder';

    echo $movies->asXML();
    ?>

    The above example will output:

    <?xml version="1.0" standalone="yes"?>
    <movies>
     <movie>
      <title>PHP: Behind the Parser</title>
      <characters>
       <character>
        <name>Miss Coder</name>
        <actor>Onlivia Actora</actor>
       </character>
       <character>
        <name>Mr. Coder</name>
        <actor>El Act&#xD3;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>
      <great-lines>
       <line>PHP solves all my web problems</line>
      </great-lines>
      <rating type="thumbs">7</rating>
      <rating type="stars">5</rating>
     </movie>
    </movies>
    

    Example #10 Adding elements and attributes

    Since PHP 5.1.3, SimpleXML has had the ability to easily add
    children and attributes.

    <?php
    include 'example.php';
    $movies = new SimpleXMLElement($xmlstr);

    $character $movies->movie[0]->characters->addChild('character');
    $character->addChild('name''Mr. Parser');
    $character->addChild('actor''John Doe');

    $rating $movies->movie[0]->addChild('rating''PG');
    $rating->addAttribute('type''mpaa');

    echo $movies->asXML();
    ?>

    The above example will output:

    <?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&#xD3;r</actor>
       </character>
      <character><name>Mr. Parser</name><actor>John Doe</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>
      <great-lines>
       <line>PHP solves all my web problems</line>
      </great-lines>
      <rating type="thumbs">7</rating>
      <rating type="stars">5</rating>
     <rating type="mpaa">PG</rating></movie>
    </movies>
    

    Example #11 DOM Interoperability

    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.

    <?php
    $dom 
    = new DOMDocument;
    $dom->loadXML('<books><book><title>blah</title></book></books>');
    if (!
    $dom) {
        echo 
    'Error while parsing the document';
        exit;
    }

    $books simplexml_import_dom($dom);

    echo $books->book[0]->title;
    ?>

    The above example will output:

    blah