The example above is a bit confusing because it uses the same variable ($doc) for two different things. I would rather write
<?php
$xsl = new XSLTProcessor();
$xsldoc = new DOMDocument();
$xsldoc->load($xsl_filename);
$xsl->importStyleSheet($xsldoc);
$xmldoc = new DOMDocument();
$xmldoc->load($xml_filename);
echo $xsl->transformToXML($xmldoc);
?>
[ Editor's note - thiago AT php DOT net: This note has improvements from Matthieu ]