xslt_process

(PHP 4 >= 4.0.3)

xslt_process -- Esegue una trasformazione XSLT

Descrizione

mixed xslt_process ( resource xh, string xml, string xsl [, string result [, array arguments [, array parameters]]])

La funzione xslt_process() è una delle più importanti della nuova estensione XSLT. Permette di eseguire una trasformazione XSLT usando quasi ogni tipo di fonte per l'input. Questa è un completamento mediante l'uso dell'argomento buffers -- un concetto preso dal processore XSLT Sablotron (attualmente l'unico processore XSLT supportato da questa estensione).

Il più semplice tipo di trasformazione con la funzione xslt_process() è la trasformazione di un file XML con un file XSLT, mettendo il risultato in un terzo file contenente un nuovo documento XML (o HTML). Fare questo con Sablotron è davvero molto semplice...

Esempio 1. Uso di xslt_process() per trasformare un file XML e un file XSL in un nuovo file XML

<?php

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {
    print
"SUCCESS, sample.xml was transformed by sample.xsl into result.xml";
    print
", result.xml has the following contents\n<br>\n";
    print
"<pre>\n";
    
readfile('result.xml');
    print
"</pre>\n";
}
else {
    print
"Sorry, sample.xml could not be transformed by sample.xsl into";
    print
"  result.xml the reason is that " . xslt_error($xh) . " and the ";
    print
"error code is " . xslt_errno($xh);
}

xslt_free($xh);

?>

Mentre questa funzionalità è importante, a volte, specialmente in un ambiente web, si vorrebbe avere la possibilità di scrivere a video il risultato direttamente. Quindi, se si omette il terzo argomento alla funzione xslt_process() (o si inserisce il valore NULL per l'argomento), lo script restituirà automaticamente il valore della trasformazione dell'XSLT, invece di scriverlo in un file...

Esempio 2. Uso di xslt_process() per trasformare un file XML e uno XSL in una variabile contenente i dati XML restituiti

<?php

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document, returning the result into the $result variable
$result = xslt_process($xh, 'sample.xml', 'sample.xsl');
if (
$result) {
    print
"SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
    print
" variable, the \$result variable has the following contents\n<br>\n";
    print
"<pre>\n";
    print
$result;
    print
"</pre>\n";
}
else {
    print
"Sorry, sample.xml could not be transformed by sample.xsl into";
    print
"  the \$result variable the reason is that " . xslt_error($xh) .
    print
" and the error code is " . xslt_errno($xh);
}

xslt_free($xh);

?>

I due casi sopra sono i due casi più semplici che ci sono quando c'è una trasformazione XSLT e c'è da dire che dovreste essere per la maggior parte delle volte in questi casi, ma, a volte, puoi prendere il tuo codice XML e XSLT da fonti esterne, come database e socket. In questi casi, avrai i dati XML e/o XSLT in una variabile -- nella produzione di applicazioni l'overhead per scaricare questo codice al file potrebbere essere eccessivo. Qui la sinstassi degli argomenti dell'XSLT ci aiuta. Invece dei file come argomenti XML e XSLT alla funzione xslt_process(), puoi specificare l' "argument place holders" il quale è poi sostituito dal valore dato nell'argomento dell'array (il quinto parametro della funzione xslt_process()). Di seguito c'è un esempio del processo di inserimento di codice XML e XSLT senza l'ausilio di file.

Esempio 3. Uso di xslt_process() per trasformare una variabile contenente dati XML e una variabile contenente dati XSL in una variabile contenente i dati XML risultanti

<?php
// $xml and $xsl contain the XML and XSL data

$arguments = array(
     
'/_xml' => $xml,
     
'/_xsl' => $xsl
);

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if (
$result) {
    print
"SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
    print
" variable, the \$result variable has the following contents\n<br>\n";
    print
"<pre>\n";
    print
$result;
    print
"</pre>\n";
}
else {
    print
"Sorry, sample.xml could not be transformed by sample.xsl into";
    print
"  the \$result variable the reason is that " . xslt_error($xh) .
    print
" and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>

Finalmente, l'ultimo argomento della funzione xslt_process() è dei parametri che vuoi passare al documento XSLT. Questi parametri possono avere poi accesso tramite i tuoi files XSL usando l'istruzione <xsl:param name="parameter_name">.