I would also have gone with jaql's approach, but I thought this was a good opportunity to have a look at XSL. I do not have access to XSLTProcessor, so I simply ran the XML through Firefox instead. From the code you posted above, I suspect you'd need to remove the stylesheet from the XML and use your original approach in this regard.
First off, I'm curious to why you're first using simplexml_load_string, and then dom_import_simplexml. Why not just
$dom = new DOMDocument();
$dom->load($data);
In the XML you load, there is allready an included XSL (first element after the opening xml tag). I don't know wether this has any impact on XSLTProcessor or not, but I chose to remove it since the result is treated as an RSS feed by Firefox, and view source shows the untransformed XML.
Furhtermore, that XML uses the media namespace in <media:thumbnail>, without first declaring the namespace. Perhaps it's part of the RSS specification, but I made some modifications to the original XML and declared it myself.
Since you are specifying a doctype, and also make use of <head><title>...</title></head>, I assumed that you want the document to be treated as an XHTML document and not XML. Else the data of the head element would not affect the title bar of a browser, but rather show up as a plain text. As such, I changed method="xml" to method="html".
Finally, since you have several item elements, I used xsl:for-each.
You should easily be able to make any necessary modifactions to the following code to match your needs.
<?php
header('Content-type: application/xml; charset=ISO-8859-1');
$external = file_get_contents('http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/eng_prem/rss.xml');
// simply for visual inspection purposes. makes it easier to read the xml code
$external = str_replace("><", ">\n<", $external);
// remove everything before the first <title> element
$start = strpos($external, '<title>');
// remove everything from, and including, the closing tag </rss>
$length = strpos($external, '</rss>') - $start;
$external = substr($external, $start, $length);
/* prepend the document with a new xml tag, your xsl and a new
channel element which also introduces the media namespace.
Since you use XSLTProcessor, you can probably remove the xml-stylesheet element.
*/
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="your_xsl_file.php"?>
<channel xmlns:media="http://whatever.com/whatever">';
echo $xml . $external;
?>
And the XSL, included by the above code as your_xsl_file.php
<?php
/* Since you use XSLTProcessor, you should probably remove this php part
completely.
*/
header("Content-type: text/xsl; charset=ISO-8859-1");
?><?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"
media-type="application/xhtml+xml" encoding="iso-8859-1"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/channel">
<html>
<head><title>Premiership News</title></head>
<body>
<items>
<xsl:for-each select="item">
<div>
<h2>
<xsl:value-of select="title"/>
</h2>
<p>
<xsl:value-of select="description"/>
</p>
</div>
<br/>
</xsl:for-each>
</items>
</body>
</html>
</xsl:template>
</xsl:stylesheet>