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" );
}
}
}
?>