Variablenübergabe von PHP nach XSL

Grafixboy

Erfahrenes Mitglied
Hi Leute

Ich wollte mal wissen ob es auch eine Möglichkeit gibt Variablen
von PHP nach XSL zu übergeben ohne das ich das xsl als string
in PHP erstelle.

Habe also eine externe 'umenue.xsl' und will da für das aktuelle
Hauptmenue alle zugehörigen Untermenü's dynamisch ausgeben.

Meine html erstelle ich aus der xml und der xsl wie folgt:

PHP:
<?
function xml2html($xmldata, $xsl)
{
    $xsltproc = xslt_create();
    xslt_set_encoding($xsltproc, 'ISO-8859-1');
    $html = xslt_process($xsltproc, "$xmldata", "$xsl", NULL);
    if (empty($html)) {
       die('XSLT processing error: '. xslt_error($xsltproc));
    }
    xslt_free($xsltproc);
    return $html;
    
}
$xmldata ="ordner/menue.xml";
if(!$file){
$xsl ="ordner/umenue.xsl";    
}else{
$xsl ="ordner/".$file;    
}
 
Zuletzt bearbeitet:
Ich sehe da spontan drei Möglichkeiten...

Daten direkt als XSLT

In PHP übertragen (z. B. als Array), Daten ergänzen und zu HTML umwandeln

XSLT in HTML wandeln und die zusätzlichen Daten auf irgendeine Art injizieren.
 
Hallo Felix Jacobi

Brauch eigendlich nur eine einzene Variable die mir eben das aktuelle Hauptmenü überträgt:

Daten direkt als XSLT
habe ich es zur Zeit ja wie oben beschrieben ;) will es ja dynamisch.
Sonst müste ich ja soviele xsl-Dateien mach wich ich Menüpunkte mit Untermenüs habe.

Beispiel für 'Modelle Mix'
In PHP übertragen
Ja wie denn ?
Hast du vielleicht ein Beispiel oder ein Link zu einem Tutorial wo dies behandelt wird ?

XSLT in HTML wandeln und die zusätzlichen Daten auf irgendeine Art injizieren.
Irgendwie das ist ja meine Frage wie geht es zu injizieren?
Ich kenn halt nur die Methode als XSLT-String in PHP mit <param>
Kann ich nur dieses mal nicht verwenden.

Danke erstmal für deine Hilfe muss es nur genauer wissen. :)
 
Moin,

evtl. hilft dir setParameter() weiter.

Beachte dass diese Parameter nur Strings sein können.

Möglicherweise wäre nach deiner Beschreibung auch etwas anderes denkbar:

Man kann PHP-Funktionen in XSL verfügbar machen (registerPHPFunctions())

Du könntest also ein Template definieren für bspw. ein Element <menu/> , welches das Menu wiederum aus einer PHP-Funktion abholt(als Knoten)
 
Das ist mir auch schon über den Weg gelaufen kann ich das in meine obigen Funktion benutzen ?
Will jetzt nicht lange Ergebnisslos rumprobieren sei denn ihr sagt ja.

Muss nähmlich noch die Exportierte Textdatei der HPBK-Seite einlesen verarbeiten und in eine DB reinschreiben lassen da sitz ich auch grad noch dran.
 
Ich wollte mal wissen ob es auch eine Möglichkeit gibt Variablen
von PHP nach XSL zu übergeben ohne das ich das xsl als string
in PHP erstelle.

Du meinst sicher ohne die Variablen und Werte in XML zu codieren? Nein, eine solche Möglichkeit gibt es in PHP nicht - auch wenn die zugrunde liegende Bibliothek die Möglichkeit bereit stellt.
Du könntest aber z.B. mittels shell_exec einen XSLT-Parser aufrufen und ihm zusätzliche Parameter übergeben. Das ist zwar unsauber und ineffizient, dennoch ungefähr das was Du willst. Aber: Ein XML-File ist immer erforderlich - egal ob es alle Daten enthält oder einige gesondert übergeben werden.
Nachfolgend ein Beispiel für xsltproc:
PHP:
<?php

function xsltproc($xslt_file, $xml_file, array $data = NULL, $print = false)
{
    $command = "xsltproc";
    if(NULL != $data)
      {
        $command.= " --stringparam";
        foreach($data as $key => $value)
            $command.= " \"$key\" \"$value\"";
      }
    $command.= " \"$xslt_file\" \"$xml_file\"";
    if($print)
      echo shell_exec($command);
    else
      return shell_exec($command);
}

xsltproc("./template.xsl", "data.xml", array("TITLE" => "Ein Test"), 1);

Natürlich ließe sich hier noch verbessern, z.B. anstelle von shell_exec mit popen oder proc_open zu arbeiten...

Gruß
Enum


[EDIT]

Soo, jetzt sehe ich auch dass PHP bei XSLT inzwischen nachgelegt hat. Von der existenz der OO-Schnittstelle z.B. wusste ich noch gar nicht. :-(
Mein Beispiel oben war eine Rekapitulation eines uralten Experiments - und nun völlig sinnlos. Naja, mir soll's egal sein. Immerhin betreu' ich seit gut drei Jahren keine PHP-Projekte mehr aktiv -
Dennoch werd' ich mich jetzt mal in die Ecke stellen und schämen...
 

Anhänge

Zuletzt bearbeitet:
glaube habe auf die libxslt keinen zugriff
ich schau mal in die phpinfo()

PHP:
//$xmldoc = domxml_open_file("xml2\\opmenue.xml");
$xmldoc = domxml_open_file("xml2/opmenue.xml");
habe beide pfadangaben versucht
die relative Pfadangabe sollte doch reichen
Fatal error: Call to undefined function domxml_open_file()

Damit habe ich dann ja doch wieder eine String in php aber anders geht es wahrscheinlich nicht.
Hab es hiermit versucht.

Habe es scheinbar doch zur verfügung :D
mach also was falsch!
xsl
XSL enabled
libxslt Version 1.1.19
libxslt compiled against libxml Version 2.6.27
EXSLT enabled
libexslt Version 1.1.19
 
Zuletzt bearbeitet:
Zurück