• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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.
 

nevermind

Bismarckapfel
Registriert
19.12.07
Beiträge
142
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>