1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Php / xslt

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von nevermind, 13.09.08.

  1. nevermind

    nevermind Bismarckapfel

    Dabei seit:
    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.
     
  2. nevermind

    nevermind Bismarckapfel

    Dabei seit:
    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>
     

Diese Seite empfehlen