Marko: Parameter in xsl:include href verwenden

Hallo,

ich möchte verschiedene XSL Dateien kombinieren. Die Pfade sind variabel, und sollen als Parameter von außen geliefert werden. Ich habe als Basispfad den Parameter $xslbasepath definiert, und möchte diesen nun in einem xsl:include verwenden. Probiert habe ich es so:

xsl:include
    <xsl:attribute name="href">
      <xsl:value-of select="$xslbasepath"/>/default.xsl
   </xsl:attribute>
</xsl:include>

Die PHP-XSL Extension (Sablotron) meckert nun rum, weil bei xsl:include angeblich ein notwendiges Attribut fehlen würde. Er erkennt wohl die Definition von href nicht, weil es nicht direkt im xsl:include Tag definiert ist.
Kann mir da jemand weiterhelfen ? Entspricht das Verhalten dem XSL Standard, oder ist das ein
Bug von Sablotron ?

Danke und Gruss

Marko

  1. Hallo,

    Die PHP-XSL Extension (Sablotron) meckert nun rum, weil bei xsl:include angeblich ein notwendiges Attribut fehlen würde.

    xsl:include ist zudem ein leeres Element und kann nicht den zugewiesenen Inhalt haben. Versuche es so:

    <xsl:include href="{$xslbasepath}/default.xsl"/>

    MfG, Thomas

    1. Hallo Thomas,

      <xsl:include href="{$xslbasepath}/default.xsl"/>

      danke, aber es geht auch nicht, $xslbasepath wird als String nicht als Variable interpretiert.

      Gruss

      Marko

      1. Hallo,

        danke, aber es geht auch nicht, $xslbasepath wird als String nicht als Variable interpretiert.

        Gibt es denn diese Variable (oder einen so bezeichneten Parameter) ueberhaupt?

        MfG, Thomas

  2. Hallo,

    ich möchte verschiedene XSL Dateien kombinieren. Die Pfade sind variabel, und sollen als Parameter von außen geliefert werden. Ich habe als Basispfad den Parameter $xslbasepath definiert, und möchte diesen nun in einem xsl:include verwenden. Probiert habe ich es so:

    xsl:include
        <xsl:attribute name="href">
          <xsl:value-of select="$xslbasepath"/>/default.xsl
       </xsl:attribute>
    </xsl:include>

    Das wichtigste: es geht nicht.

    Auch die von Thomas vorgeschlagenen Möglichkeit (<xsl:include href="{$xslbasepath}/default.xsl"/>
    ) kann nicht funktionieren.

    Der Wert des Attributes href _muss_ eine URI sein. D.h. auch ein {$xslbasepath} wird als Teil der URI angesehen.
    Wenn du versuchst Stylesheets konditional zu einbinden, ist es als würdest du z.B. in VB ein Programm schreiben, dass sich selbst beim Ausführen modifiziert.
    Im Klartext: xsl:include witd zu Kompilierungszeit ausgeführt, _bevor_ die Anwendung des Stylsheets anfängt.

    Du kannst etnweder miz verschiedenen mode-s arbeiten (<xsl:temlpate< name="xxx" mode="xxx"> oder mehrere Stylesheets definieren und diese je nach Bedarf inkludieren.

    Grüße
    Thomas

    1. Hallo Thomas,

      Im Klartext: xsl:include witd zu Kompilierungszeit ausgeführt, _bevor_ die Anwendung des Stylsheets anfängt.

      Danke fuer den Hinweis. Ich bin dieser Idee nachgegangen, weil ich in einem Projekt eine Processing Instruction (xml-stylesheet) in analoger Weise erzeuge, wobei diese aber in das Ausgabedokument eingefuegt wird.

      MfG, Thomas