12.1. Generating XML Manually
Problem
You want to generate XML. For instance, you want to provide an XML version of your data for another program to parse.
Solution
Loop through your data and print it out surrounded by the correct XML tags:
header('Content-Type: text/xml');
print '<?xml version="1.0"?>' . "\n";
print "<shows>\n";
$shows = array(array('name' => 'Simpsons',
'channel' => 'FOX',
'start' => '8:00 PM',
'duration' => '30'),
array('name' => 'Law & Order',
'channel' => 'NBC',
'start' => '8:00 PM',
'duration' => '60'));
foreach ($shows as $show) {
print " <show>\n";
foreach($show as $tag => $data) {
print " <$tag>" . htmlspecialchars($data) . "</$tag>\n";
}
print " </show>\n";
}
print "</shows>\n";Discussion
Printing out XML manually mostly involves lots of
foreach loops as you iterate through arrays.
However, there are a few tricky details. First, you need to call
header( )
to set the correct
Content-Type
header for the document. Since you’re sending XML
instead of HTML, it should be text/xml.
Next, depending on your settings for the
short_open_tag
configuration
directive, trying to print the XML declaration may accidentally turn
on PHP processing. Since the <? of
<?xml version="1.0"?> is the short PHP open
tag, to print the declaration to the browser you need to either
disable the directive or print the line from within PHP. We do the
latter in the Solution.
Last, entities must be escaped. For example, the
& in the show Law & Order needs to be &. Call
htmlspecialchars( ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access