(PHP 4 >= 4.0.3)
xslt_process — Esegue una trasformazione XSLT
$xh
, string $xmlcontainer
, string $xslcontainer
[, string $resultcontainer
[, array $arguments
[, array $parameters
]]] )La funzione xslt_process() è il punto cruciale dell'estensione XSLT. Essa permette di eseguire una trasformazione XSLT utilizzando quasi qualsiasi tipo di sorgente come input - i contenitori. Questo si realizza attraverso l'utilizzo di buffer argomento -- un concetto preso dal processore XSLT Sablotron (attualmente l'unico processore XSLT che questa estensione supporta). I contenitori predefiniti di input ad un nome di file 'contenente' il documento da elaborare.
xh
The XSLT processor link identifier, created with xslt_create().
xmlcontainer
Percorso al file XML o un segnaposto per l'argomento XML.
xslcontainer
Percorso al file XSLo un segnaposto per l'argomento XML.
resultcontainer
Il container risultato predefinito ad un nome di file per il documento
trasformato. Se il container risultato non è specificato - p.e. NULL
- allora viene restituito il risultato.
arguments
Invece di file XML e XSLT come argomenti alla funzione
xslt_process(), puoi specificare "argomenti segnaposto" che sono poi sostituiti dai valori
dati nell'array arguments
.
parameters
Un array per qualsiasi parametro di primo livello che sarà passato al documento XSLT. Dopo si può accedere a questi parametri all'interno dei file XSL utilizzando l'istruzione <xsl:nome del parametro="nome_parametro">. I parametri devono essere codificati con UTF-8 e i loro valori saranno interpretati come stringhe dal processore Sablotron. In altre parole - non si possono passare set di nodi come parametri al documento XSLT.
I container possono anche essere impostati attraverso l'array arguments
(vedi di seguito).
Restituisce TRUE
in caso di successo, FALSE
in caso di fallimento. Se il contenitore risultato non è specificato - p.e.
NULL
- allora viene restituito il risultato.
Versione | Descrizione |
---|---|
4.0.6 |
Questa funzione non prende più stringhe XML in
xmlcontainer o
xslcontainer . Il passaggio di una stringa contenente XML
ad uno di questi parametri si tradurrà in un errore di segmentazione nelle
versioni di Sablotron fino a 0.95.
|
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 il nuovo documento XML (o HTML). Fare questo con Sablotron è davvero molto semplice...
Example #1 Utilizzare la funzione xslt_process() per trasformare un file XML ed un file XSL in un nuovo file XML
<?php
// Allocazione di un nuovo processore XSLT
$xh = xslt_create();
// Elaborazione del documento
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {
echo "SUCCESS, sample.xml was transformed by sample.xsl into result.xml";
echo ", result.xml has the following contents\n<br />\n";
echo "<pre>\n";
readfile('result.xml');
echo "</pre>\n";
} else {
echo "Sorry, sample.xml could not be transformed by sample.xsl into";
echo " result.xml the reason is that " . xslt_error($xh) . " and the ";
echo "error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>
Anche se questa funzione è ottima, molte volte, soprattutto in un ambiente web, si vuole essere in grado di stampare direttamente i risultati. Pertanto, se si omette il terzo argomento della funzione xslt_process() (o si fornisce un valore NULL value per l'argomento), sarà automaticamente restituito il valore della trasformazione XSLT, invece di scriverla direttamente in un file...
Example #2 Utilizzare la funzione xslt_process() per trasformare un file XML ed un file XSL in una variabile che contiene i dati XML risultanti
<?php
// Allocazione di un nuovo processore XSLT
$xh = xslt_create();
// Elaborazione del documento, restituendo il risultato nella variabile $result
$result = xslt_process($xh, 'sample.xml', 'sample.xsl');
if ($result) {
echo "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
echo " variable, the \$result variable has the following contents\n<br />\n";
echo "<pre>\n";
echo $result;
echo "</pre>\n";
} else {
echo "Sorry, sample.xml could not be transformed by sample.xsl into";
echo " the \$result variable the reason is that " . xslt_error($xh);
echo " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>
I due casi mostrati sopra sono i due casi più semplici che ci possono essere quando si tratta di trasformazione XSLT e si oserebbe dire che sono i casi più comuni, tuttavia, a volte si ottiene il codice XML e XSLT da fonti esterne, come un database o un socket. In questi casi si avranno i dati XML e/o XSLT in una variabile -- e nelle applicazione di produzione il sovraccarico di operazioni di dumping per questi file potrebbe essere troppo. Questo è il caso in cui la sintassi dell'"argomento" di XSLT, viene in soccorso. Invece di file come argomenti XML e XSLT alla funzione xslt_process(), si possono specificare "segnaposto degli argomenti" che vengono poi sostituiti da valori dati negli argomenti array (5° parametro della funzione xslt_process()). Di seguito è riportato un esempio di trasformazione XML e XSLT in una variabile risultato senza l'utilizzo di file.
Example #3 Utilizzare la funzione 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 e $xsl contengono i dati XML e XSL
$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);
// Allocazione di un nuovo processore XSLT
$xh = xslt_create();
// Elaborazione del documento
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
echo "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
echo " variable, the \$result variable has the following contents\n<br />\n";
echo "<pre>\n";
echo $result;
echo "</pre>\n";
} else {
echo "Sorry, sample.xml could not be transformed by sample.xsl into";
echo " the \$result variable the reason is that " . xslt_error($xh);
echo " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>
Example #4 Passare variabili PHP ai file XSL
<?php
// stringa XML
$xml = '<?xml version="1.0"?>
<para>
change me
</para>';
// stringa XSL
$xsl = '
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" indent="no"
omit-xml-declaration="yes" media-type="text/html"/>
<xsl:param name="myvar"/>
<xsl:param name="mynode"/>
<xsl:template match="/">
My PHP variable : <xsl:value-of select="$myvar"/><br />
My node set : <xsl:value-of select="$mynode"/>
</xsl:template>
</xsl:stylesheet>';
$xh = xslt_create();
// il secondo parametro sarà interpretato come una stringa
$parameters = array (
'myvar' => 'test',
'mynode' => '<foo>bar</foo>'
);
$arguments = array (
'/_xml' => $xml,
'/_xsl' => $xsl
);
echo xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments, $parameters);
?>
Il precedente esempio visualizzerà:
My PHP variable : test<br> My node set : <foo>bar</foo>
Nota:
Si noti che file:// è necessario all'inizio del path se si usa Windows.