• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Php / xslt

nevermind

Bismarckapfel
Registriert
19.12.07
Beiträge
142
Ich schaffe es nicht per XSLTProcessor::setParameter(); eine (vollständige) XPath-Anweisung an den XSLT-Code übergeben. Liegt das an mir, am XSLT-P., oder ist das normal?

Beispiel 1: Das hier geht. Da der XSLT-P. keine <xsl:variable> setzen kann bzw. keinen <xsl:param> in der XPath-Anweisung akzeptiert (ist das so?), hab ich mir mit einem Workaround geholfen:

Code:
<?php XSLTProcessor::setParameter($ns, array('mykey' => $key, 'myval' => $val)); ?>

<xsl:param name="mykey"/>
<xsl:param name="myval"/>
<xsl:variable name="key" select="$mykey"/>
<xsl:variable name="val" select="$myval"/>
<xsl:template match="table">
	<xsl:for-each select="row[$mykey = $myval]">
	(...)

Beispiel 2: Da die Methode oben ziemlich unflexibel ist, will ich die Komplette XPath-Anweisung übergeben, aber das geht nicht (Ergebnis: NULL).

Code:
<?php XSLTProcessor::setParameter($ns, 'path', $path); ?>

<xsl:param name="path"/>
<xsl:variable name="xpath" select="$path"/>
<xsl:template match="table">
	<xsl:for-each select="$xpath">
	(...)

Wär' nett wenn mir da jemand helfen könnte.
 
Für den Fall, dass es jemanden interessiert: Man kann im Stylesheet PHP-Funktionen aufrufen, und zwar so: php:function('<fn-name>', '<param-1>', '<param-n>'). Damit kann man auch komplette Knotenbäume laden. Sieht zwar dreckig aus, aber the trick does it.

Beispiel:
Code:
<?php
XSLTProcessor::registerPHPFunctions();
function getNodes() { return $xpathresult; }
?>

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:php="http://php.net/xsl"
>
<xsl:template match="table">
	<xsl:for-each select="php:function('getNodes')">
	(...)
	</xsl:for-each>
</xsl:template>