Output raw XML using php

I want to output raw xml in a manner similar to http://www.google.com/ig/api?weather=Mountain+View but using PHP.

I have a very simple php script on my webserver:

<?php 

      $output = "<root><name>sample_name</name></root>";
      print ($output);
?> 

All I can see in Chrome/firefox is "sample_name". I want to see:

<root>
     <name>sample_name</name>
</root>

I cannot find a tutorial for anything THIS simple.

Thanks


Solution 1:

By default PHP sets the Content-Type to text/html, so the browsers are displaying your XML document as an HTML page.

For the browser to treat the document as XML you have to set the content-type:

header('Content-Type: text/xml');

Do this before printing anything in your script.

Solution 2:

<?php 
header('Content-Type: application/xml');
$output = "<root><name>sample_name</name></root>";
print ($output);
?> 

Solution 3:

You only see "sample_name" because you didn't specify that your output is XML and the browser thinks it's HTML so your XML-Elements are interpreted as HTML-Elements.

To see the raw XML, you need to tell the browser that you're actually sending XML by sending the correct content-type in the HTTP header:

header('Content-Type: application/xml');

This needs to be send (put in the code) before you put out anything else.

Solution 4:

For completeness sake, as nobody's mentioned it yet, you can also output raw XML within an HTML page, by escaping < as &lt;, > as &gt;, and & as &amp;. To do that, use the awkwardly named htmlspecialchars function.

Often, you'll also want to preserve whitespace in the argument, which can be done by surrounding it in <pre> tags. So a common line for debugging or including a sample is this:

 echo '<pre>' . htmlspecialchars($raw_xml) . '</pre>';