setParameter in einem XSL Dokument

Sixty

Mitglied
Hiho,

ich bin echt am verzweifeln und hoffe jemand kann mir helfen. Undzwar folgendes:

Ich habe in einem XSL-Document einen Parameter:
Code:
<xsl:param name="layout" select="'red'"/>
diesen möchte ich nun aus einem PHP-Skript verändern.

Dazu folgender Link:
http://php.net/manual/en/xsltprocessor.setparameter.php
Leider lässt sich diese Funktion nur im Zusammenhang mit einem eingelesenen XML-Dokument anwenden.

Das PHP-Skript soll den Parameter ändern und den geänderten Inhalt abspeichern..
 
Dein Script muss folgende Schritte machen

1) Einlesen des XML (ev als String)
2) Suchen des Parameters (ev. mit Regulären Ausdrücken)
3) Ersetzen desselben (ebenfalls Reguläre Ausdrücke)
4) Speichern der Datei

Bei welchem Schritt hast du Probleme? Wie sehen deine bisherigen Versuche aus?
 
Danke für die schnelle Antwort!

Mein XSL-Codeabschnitt sieht zurzeit so aus:

Code:
<xsl:param name="layout" select="'red'"/>

und mein PHP-Codeabschnitt sieht so aus:

Code:
	$xsl_dom = new DOMDocument;
	$xsl_dom->load($pfad_xsl.'/xsl_fop/protocol_config.xsl');

	// Configure the transformer
	$proc = new XSLTProcessor;
	$proc->importStyleSheet($xsl_dom);
	
	$proc->registerPhpFunctions(); 
	
	$proc->setParameter(null, 'print', $layout);

"red" soll durch "print" ersetzt werden und in der XSL-Datei stehenbleiben.
 
Hi,

also wenn du deine XSL-Datei sowieso als DOMDocument laden musst, dann würde ich vom Ersetzen mittels regulärer Ausdrücke absehen und stattdessen die Ersetzung im DOM mittels XPath vornehmen. Hier mal eine kleine Anregung (ungetestet).
PHP:
$dom = new DOMDocument();
$dom->load($xslDatei);

$xpath = new DOMXPath($dom);
$xpath->registerNamespace('xsl', 'http://www.w3.org/1999/XSL/Transform');

$param = $xpath->evaluate("//xsl:param[@name = 'layout']");

$param->setAttribute('select', "'print'");

$dom->save($neueXSLDatei);
So kannst du den Parameter in der Datei verändern. Vorischt ist geboten, bei dem Ausdruck, der im XPath verwendet wird, da der im Moment nach allen XSL-param Elementen sucht, die einen Parameter "name" mit dem Wert Layout haben, hier sollte man besser einen absoluten Pfad angeben.

Ich hoffe, das hilft dir weiter. :)
 
Zuletzt bearbeitet:
Zurück