PHP
Referenzliste
xslt_process
XSLT Funktionen
Befehl:
mixed xslt_process ( resource $xh , string $xmlcontainer , string $xslcontainer [, string $resultcontainer [, array $arguments [, array $parameters ]]] )
Parameter-Liste:
Beschreibung | |
---|---|
Der XSLT-Prozessor-Linkidentifier, der mittels xslt_create() erzeugt wurde. | |
Pfad zur XML-Datei oder Platzhalter für ein XML-Argument. | |
Pfad zur XSL-Datei oder Platzhalter für ein XML-Argument. | |
Der 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. | |
Anstelle 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. | |
Ein 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. |
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.
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.
<?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:
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:
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:
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: <foo>bar</foo>
Mein Node-Set: <foo>bar</foo>
Beschreibung:
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