PHP Lösning
Nedanstående program är en "universallösning". Döp om det vid behov. 
För att detta program skall fungera måste ni ha en relativt ny PHP samt tillgång
till php_xslt.dll extensionen i Win eller php_xslt.so i Unix. De behöver inte 
nödvändigtvis vara laddade, eftersom programmet laddar extensionen dynamiskt vid behov.
Kontrollera i php.ini (eller med phpinfo) vilken katalog som extension_dir är satt till, 
samt kontrollera att det i den katalogen finns php_xslt extensionen. Oavsett vad ni 
hittar i sidor på nätet, så skall ni inte använda php_sablot extensionen. 
Den finns med i php.ini, men är föråldrad. På PHP 4.x datorer används php_xslt... Jag har inte kunnat kontrollera det fullt ut, men jag tror att det krävs PHP 4.0.6 eller nyare.
Observera att PHP programmet är helt passivt. Det tar XML filen samt XSL filen,
laddar dessa samt sätter allt eventuellt GET data till XSL filen. Programmet gör 
ingenting annat, utan programmeringen sker i XSL filen.
Provkör programmet
xml_to_html.php
<?php
  	# visa resultatet av 
  	# demo.xml 
  	# transformerad med
  	# demo.xsl
  	echo doTransform( "demo.xml", "demo.xsl" );
  	
  	# funktionen tar två parametrar
  	# en xml fil och en xsl fil
  	# returnerar den genererade html koden
  	function doTransform( $xmlFile, $xslFile )
  	{
    		# kolla om xslt extensionen finns
    		if ( checkExtension( "xslt" ) )
    		{	
      			# skapa xslt processorn
      			$xh = xslt_create();
      			# sablotron som används för konverteringen är rätt 
      			# kinkig med filnamn. Se till att det blir en file:// url
      			$xmlFile = "file://" . realpath( $xmlFile ) ; 
      			$xslFile = "file://" . realpath( $xslFile ) ;
      			
      			global $HTTP_GET_VARS;
      			# fanns det nåt i adressraden?
      			if ( isset( $HTTP_GET_VARS ) AND count( $HTTP_GET_VARS ) > 0 ) 
      			{
        				# ge i så fall allt detta åt processorn
        				$result = xslt_process( 
            						$xh, 
            						$xmlFile ,	# datafilen
            						$xslFile ,	# xslfilen
            						NULL,		# behövs inte
            						array(),	# tom array för argumenten
            						$HTTP_GET_VARS # Sänd alla GET
            						);
      			}
      			else
      			{
        				# processa utan parametrar
        				$result = xslt_process( $xh, $xmlFile , $xslFile );
      			}
      			if ( $result ) 
      			{
        				# returnera html koden
        				return $result ;
      			}
      			else 
      			{
        				# returnera felmmeddelande och felnummer
        				return xslt_error( $xh ) . " " . xslt_errno( $xh );
      			}
      			# stäng xslt processorn
      			xslt_free( $xh );
    		}
    		else
    		{
      			# har inte tillgång till XSLT extensions
      			return "XSLT not enabled and no extension found";
    		}
  	}
  	# kolla om en viss extension finns och försök ladda den
  	# om den inte finns färdigt laddad
  	function checkExtension( $extension ) 
  	{ 
    		$all = get_loaded_extensions(); 
    		if ( in_array( $extension, $all ) )	
    		{ 
      			return true; 
    		} 
    		else 
    		{ 
      			if ( strtoupper( substr( PHP_OS, 0, 3 ) ) == "WIN" )
      			{ 
        				return @ dl( "php_" . $extension . ".dll" ); 
      			} 
      			else { 
        				return @ dl( "php_" . $extension . ".so" ); 
      			} 
    		} 
  	} 
?>