XMLDynamiska sidorPHP
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunderna XSL Dynamiska sidor XML i praktiken

PHP

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

  ASPCocoon
Dynamiska sidor
ASP
PHP
Cocoon


Top
< ASP Cocoon>
© Anders Enges, Vörå 2002  | 08.03.02 10:31 Visa asp koden