• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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>