Du bist hier: Tips » Scripte » PHP
PHP
Referenzliste

xslt_process

XSLT Funktionen

    Befehl:
mixed xslt_process ( resource $xh , string $xmlcontainer , string $xslcontainer [, string $resultcontainer [, array $arguments [, array $parameters ]]] )


    Parameter-Liste:
NameBeschreibung
xhDer XSLT-Prozessor-Linkidentifier, der mittels xslt_create() erzeugt wurde.
xmlcontainerPfad zur XML-Datei oder Platzhalter für ein XML-Argument.
xslcontainerPfad zur XSL-Datei oder Platzhalter für ein XML-Argument.
resultcontainerDer Result-Container enthält standardmäßig den Dateinamen des transformierten Dokuments. Wenn der Result-Container nicht angegeben wurde (also NULL ist), wird das Ergebnis zurückgegeben.
argumentsAnstelle von Dateien können Sie auch "Argument-Platzhalter" als XML- oder XSLT-Argumente an xslt_process() übergeben. Diese Platzhalter werden durch die im arguments-Array angegebenen Werte ersetzt.
parametersEin Array von aller Toplevel-Parameter, die an das XSLT-Dokument übergeben werden sollen. Auf diese Parameter können Sie in Ihren XSL-Dateien unter Verwendung einer <xsl:param name="parameter_name">-Anweisung zugreifen. Die Parameter müssen UTF-8-kodiert sein, ihre Werte werden vom Sablotron-Prozessor als Strings interpretiert. Mit anderen Worten, Sie können keine Node-Sets als Parameter an ein XSLT-Dokument übergeben.
Container können außerdem mittels des arguments-Arrays bestimmt werden (siehe unten).

    Beschreibung:
Die Funktion xslt_process() ist die Krux der XSLT-Extension. Sie erlaubt es Ihnen, eine XSLT-Transformation unter Verwendung von fast jeder Art von Eingabequelle durchzuführen - den Containern. Dies wird durch die Verwendung von Argument-Buffern erreicht, einem Konzept, das vom Sablotron-XSLT-Prozessor übernommen wurde (derzeit der einzige XSLT-Prozessor, den diese Extension unterstützt). Die Input-Container enthalten standardmässig einen Dateinamen, der für die zu prozessierende Datei steht.


    Aktiv in Version:
(PHP 4 >= 4.0.3, PHP 7)

    Hinweis:
Hinweis:

Wenn Sie Windows verwenden, beachten Sie bitte, vor Pfadangaben file:// zu schreiben.


xslt_process() - Beispiel: Verwendung von xslt_process(), um eine XML-Datei und eine XSL-Datei in ein neues XML-File zu transformieren


Eingabe:
Die einfachste Art einer Transformation mit der xslt_process()-Funktion ist die Transformation eines XML-Files durch ein XSLT-File und die Speicherung des Ergebnisses in eine dritte Datei, die das neue XML- (oder HTML-)Dokument enthält. Dies mit Sablotron zu tun ist mehr als einfach.


<?php
// Einen neuen XSLT-Prozessor erstellen
$xh = xslt_create();

// Das Dokument verarbeiten
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {
    echo "ERFOLG, sample.xml wurde durch sample.xsl in result.xml transformiert";
    echo ", result.xml hat folgenden Inhalt\n<br />\n";
    echo "<pre>\n";
    readfile('result.xml');
    echo "</pre>\n";
} else {
    echo "Sorry, sample.xml konnte nicht von sample.xsl in result.xml ";
    echo "transformiert werden. Fehlermeldung: " . xslt_error($xh) . " und ";
    echo "Fehlernummer: " . xslt_errno($xh);
}

xslt_free($xh);
?>


Obwohl diese Funktion in den meisten Fällen, besonders im Webumfeld, hervorragend läuft, sollten Sie dennoch davon absehen, Ihre Ergebnisse direkt auszugeben. Daher ist es geschickter, das dritte Argument der xslt_process()-Funktion wegzulassen (oder dem Argument NULL zu übergeben) und damit den Rückgabewert der XSLT-Transformation zu erhalten, statt ihn in eine Datei zu schreiben.

Beschreibung:
Version Beschreibung
4.0.6 Die Funktion akzeptiert nicht länger Strings in xmlcontainer und xslcontainer. Die Übergabe von XML-enthaltenden Zeichenketten an einen der beiden Parameter erzeugt einen Speicherzugriffsfehler in Sablotronversionen bis inklusive 0.95.
xslt_process() - Beispiel 2: Verwendung von xslt_process(), um eine XML-Datei und eine XSL-Datei zu transformieren und einer Variable die resultierenden XML-Daten zuzuweisen


Eingabe:
<?php
// Einen neuen XSLT-Prozessor erstellen
$xh = xslt_create();

// Dokument verarbeiten, Rückgabe des Ergebnisses an die $result-Variable
$result = xslt_process($xh, 'sample.xml', 'sample.xsl');
if ($result) {
    echo "ERFOLG, sample.xml wurde durch sample.xsl in die Variable \$result ";
    echo "transformiert, die Variable \$result hat folgenden Inhalt\n<br />\n";
    echo "<pre>\n";
    echo $result;
    echo "</pre>\n";
} else {
    echo "Sorry, sample.xml konnte nicht von sample.xsl in die Variable \$result ";
    echo "transformiert werden. Fehlermeldung: " . xslt_error($xh) . " und ";
    echo "Fehlernummer: " . xslt_errno($xh);
}

xslt_free($xh);
?>


Die oberen zwei Fälle sind die einfachsten Fälle die es gibt, wenn eine XSLT-Transformation durchgeführt werden soll. Unseres Erachtens sind sie sogar die häufigsten Fälle; allerdings erhalten Sie auch häufig Ihr XML- und XSLT-Daten aus externen Quellen wie Datenbanken oder Sockets. In diesen Fällen befinden sich die XML- und/oder die XSLT-Daten in einer Variablen - und in Anwendungen, die produktiv eingesetzt werden, erzeugt es zu viel Overhead, diese Daten vor ihrer Verarbeitung erst in eine Datei zu schreiben. An dieser Stelle kommt die XSLT-"argument"-Syntax zum Tragen. Anstatt Dateien als XML- und XSLT-Argumente an xslt_process() zu übergeben, können Sie "Argumentplatzhalter" angeben, die durch die im Argument-Array übergebenen Werte ersetzt werden (der fünfte Parameter der Funktion xslt_process()). Nachfolgend zeigen wir in einem Beispiel, wie XML und XSLT verarbeitet und das Ergebnis in eine Variable geschrieben wird, ohne eine Datei zu verwenden.

Beschreibung:
Version Beschreibung
4.0.6 Die Funktion akzeptiert nicht länger Strings in xmlcontainer und xslcontainer. Die Übergabe von XML-enthaltenden Zeichenketten an einen der beiden Parameter erzeugt einen Speicherzugriffsfehler in Sablotronversionen bis inklusive 0.95.
xslt_process() - Beispiel 3: Verwendung von xslt_process(), um eine XML-Daten enthaltende Variable und eine XSL-Daten enthaltende Variable in eine Variable zu transformieren, die die resultierenden XML-Daten enth�lt


Eingabe:
<?php
// $xml und $xsl enthalten die XML- und XSL-Daten

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

// Einen neuen XSLT-Prozessor erzeugen
$xh = xslt_create();

// Dokument verarbeiten
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
    echo "ERFOLG, sample.xml wurde durch sample.xsl in die Variable \$result ";
    echo "transformiert, die Variable \$result hat folgenden Inhalt\n<br />\n";
    echo "<pre>\n";
    echo $result;
    echo "</pre>\n";
} else {
    echo "Sorry, sample.xml konnte nicht von sample.xsl in die Variable \$result ";
    echo "transformiert werden. Fehlermeldung: " . xslt_error($xh) . " und ";
    echo "Fehlernummer: " . xslt_errno($xh);
}
xslt_free($xh);
?>


Beschreibung:
Version Beschreibung
4.0.6 Die Funktion akzeptiert nicht länger Strings in xmlcontainer und xslcontainer. Die Übergabe von XML-enthaltenden Zeichenketten an einen der beiden Parameter erzeugt einen Speicherzugriffsfehler in Sablotronversionen bis inklusive 0.95.
xslt_process() - Beispiel 4: PHP-Variablen an die XSL-Dateien �bergeben


Eingabe:
<?php
// XML-String
$xml = '<?xml version="1.0"?>
<para>
 ändere mich
</para>';

// XSL-String
$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="/">
Meine PHP-Variable: <xsl:value-of select="$myvar"/><br />
Mein Node-Set: <xsl:value-of select="$mynode"/>
 </xsl:template>
</xsl:stylesheet>';


$xh = xslt_create();

// der zweite Parameter wird als String interpretiert
$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);
?>


Ausgabe:
Meine PHP-Variable: test<br>
Mein Node-Set: &lt;foo&gt;bar&lt;/foo&gt;


Beschreibung:
Version Beschreibung
4.0.6 Die Funktion akzeptiert nicht länger Strings in xmlcontainer und xslcontainer. Die Übergabe von XML-enthaltenden Zeichenketten an einen der beiden Parameter erzeugt einen Speicherzugriffsfehler in Sablotronversionen bis inklusive 0.95.
XSLT Funktionen