Outputting XML

string asXML ( [void ])

One of the most interesting features about SimpleXML is that it can, at any time, give you a string containing the well-formed XML representation of its data. This essentially does the opposite of simplexml_load_file(), but the best bit about it is that it incorporates any changes you've made to the data whilst it was in SimpleXML form.

For example:

$xml = simplexml_load_file('employees.xml');
$xml->employee[1]->age = 55;
echo $xml->asXML();

That loads our XML file, and changes the second employee (remember, it's a zero-based array, so the 1 actually refers to the second element) to have an age of 55. The call to asXML() then outputs the changed data tree, printing this:

<?xml version="1.0"?> <employees>
                <name>Anthony Clarke</name>
                <title>Chief Information Office</title>

                <name>Laura Pollard</name>
                <title>Chief Executive Officer</title>

Note the changed value for Laura's age. However, blindly changing values isn't a smart move: the XML could change quite easily so that Pollard was no longer the second person in there. Instead, you should really combine it with an XPath search, like this:

    $xml = simplexml_load_file('employees.xml');
    echo "\nBefore transformation:\n\n";

    echo $xml->asXML();

    $xml->employee[1]->age = 55;

    $employees = $xml->xpath('/employees/employee[name="Anthony Clarke"]');
    $employees[0]->title = "Chairman of the Board, Chief Information Office";

    echo "\n\nAfter transformation:\n\n";
    echo $xml->asXML();

This time the age is changed by referencing Laura directly, but I've also changed the job title of Anthony Clarke using a smart XPath search for his exact name. Of course, even names can be duplicated by chance, so an employee ID would be even better!


Next chapter: Transforming XML using XSLT >>

Previous chapter: Searching and filtering with XPath

Jump to:


Home: Table of Contents

Copyright ©2015 Paul Hudson. Follow me: @twostraws.