Cyberfuzzy: dateiname per xsl:call-template zurückbekommen und mit document() öffnen?

Hallo,

ich habe ein Template, das mir einen Dateinamen berechnet. Dieses Template ersetzt bei einem Dateinamen die Dateinamenerweiterung durch .xml

Beispiel:
<xsl:call-template name="getFileName"><xsl:with-param name="xmlfilename" select="'testdatei.abc.jpg'"/></xsl:call-template>
liefert mir testdatei.abc.xml zurück.

Im Template wird der Dateiname dann per xsl:value-of ausgegeben.

Jetzt habe ich das Problem, dass ich diesen generierten Dateinamen in einem document() Tag verwenden möchte. Ich kann aber nicht ein Tag in ein Tag schreiben:

<xsl:value-of select="document('<xsl:call-template name="getFileName"><xsl:with-param name="xmlfilename" select="'testdatei.abc.jpg'"/>')"/>
-> funktioniert nicht.

Hat jemand eine Idee, wie ich das lösen könnte?

Danke schonmal.

Gruß
Cyberfuzzy
--
http://www.cyberfuzzy.com

P.S.: Hier noch das gesamte Template:

<xsl:template name="getFileName">
  <xsl:param name="xmlfilename"/>
  <xsl:param name="pos"/>
  <xsl:param name="originalfilename"/>

xsl:choose
   <xsl:when test="contains($xmlfilename,'.')">
    xsl:choose
     <xsl:when test="string-length($originalfilename) = 0">
      <xsl:call-template name="getFileName">
       <xsl:with-param name="xmlfilename" select="substring-after($xmlfilename,'.')"/>
       <xsl:with-param name="pos" select="string-length(substring-before($xmlfilename,'.'))"/>
       <xsl:with-param name="originalfilename" select="$xmlfilename"/>
      </xsl:call-template>
     </xsl:when>
     xsl:otherwise
      <xsl:call-template name="getFileName">
       <xsl:with-param name="xmlfilename" select="substring-after($xmlfilename,'.')"/>
       <xsl:with-param name="pos" select="$pos + 1 + string-length(substring-before($xmlfilename,'.'))"/>
       <xsl:with-param name="originalfilename" select="$originalfilename"/>
      </xsl:call-template>
     </xsl:otherwise>
    </xsl:choose>
   </xsl:when>
   xsl:otherwise
    <xsl:value-of select="concat(substring($originalfilename,1,$pos),'.xml')"/>
   </xsl:otherwise>
  </xsl:choose>
</xsl:template>

  1. Jetzt habe ich das Problem, dass ich diesen generierten Dateinamen in einem document() Tag verwenden möchte. Ich kann aber nicht ein Tag in ein Tag schreiben:

    Hat jemand eine Idee, wie ich das lösen könnte?

    Erstelle eine Variable und übergib diese.

  2. Hi,

    <xsl:value-of select="document('<xsl:call-template name="getFileName"><xsl:with-param name="xmlfilename" select="'testdatei.abc.jpg'"/>')"/>
    -> funktioniert nicht.

    Hm, ich weiß nicht, ob xsl:attribute auch bei xsl:value-of funktioniert - probiers mal aus und berichte dann.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo,

      Hm, ich weiß nicht, ob xsl:attribute auch bei xsl:value-of funktioniert - probiers mal aus und berichte dann.

      Das bringt nichts da select einerseits ein erforderliches Attribut von xsl:value-of ist und andererseits durch xsl:attribute ein Attribut im Ausgabebaum erzeugt wird.

      Zur Antwort von dedlfix (Verwendung einer Variable) fuege ich noch hinzu, dass man das Ersetzen der Dateierweiterung mittels Zeichenkettenfunktionen auch direkt beim Aufruf von document() vornehmen kann.

      MfG, Thomas

      1. Hi,

        Hm, ich weiß nicht, ob xsl:attribute auch bei xsl:value-of funktioniert - probiers mal aus und berichte dann.
        Das bringt nichts da select einerseits ein erforderliches Attribut von xsl:value-of ist und andererseits durch xsl:attribute ein Attribut im Ausgabebaum erzeugt wird.

        Klingt logisch ;-)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.