Edmund Schöpf: for-each über einen variablen Knoten

Ich versuche ein "dynamisches loop" zu verwenden.

Das loop über einen "variablen Knotennamen" funktioniert.

<xsl:variable name="MY_ELEMENT" select="/ROOT/UNTERKNOTEN" />
    <xsl:for-each select="$MY_ELEMENT">
    .....

Bei folgenden Loop erhalte den Fehler (der merge zwischen xml und xsl erfolgt über eine Javaklasse): #STRING kann nicht in NodeList konvertiert werden!
$ANDERE_VARIABLE wird in meinem Falle an das Template übergeben. Kann aber auch eine x-beliebeige Variable sein. Funktioniert leider nicht.

<xsl:variable name="MY_ELEMENT" select="$ANDERE_VARIABLE" />
    <xsl:for-each select="$MY_ELEMENT">
    .....

Was muss ich tun, damit der Knoten den ich auslese variabel sein kann.

Danke
Edy

  1. Bist du dir auch sicher, dass hinter $ANDERE_VARIABLE auch ein Knoten steckt?

    Gruß, hh

    1. Bist du dir auch sicher, dass hinter $ANDERE_VARIABLE auch ein Knoten steckt?

      Gruß, hh

      Ich rufe ein Template auf und übergib dort den Wert wie folgt:

      <xsl:call-template name="MEINTEMPLATE">
            <xsl:with-param name="ANDERE_VARIABLE">/ROOT/UNTERKNOTEN</xsl:with-param>
          </xsl:call-template>

      Mein Template sieht dann so aus:

      <xsl:template name="MEINTEMPLATE">
          <xsl:param name="ANDERE_VARIABLE"/>
          <xsl:variable name="MY_ELEMENT" select="$ANDERE_VARIABLE" />
          <xsl:for-each select="$MY_ELEMENT">
      .....
      Ich hatte es auch schon direkt mit dem for-each auf $ANDERE_VARIABLE versucht. Leider ohne Erfolg.

      Edy

      1. Hallo,

        Ich rufe ein Template auf und übergib dort den Wert wie folgt:

        <xsl:call-template name="MEINTEMPLATE">
              <xsl:with-param name="ANDERE_VARIABLE">/ROOT/UNTERKNOTEN</xsl:with-param>

        Der Wert des Paremters ist hier ein String!

        <xsl:with-param name="ANDERE_VARIABLE" select="/ROOT/UNTERKNOTEN" />

        Grüße
        Thomas

        1. Hallo,

          Ich rufe ein Template auf und übergib dort den Wert wie folgt:

          <xsl:call-template name="MEINTEMPLATE">
                <xsl:with-param name="ANDERE_VARIABLE">/ROOT/UNTERKNOTEN</xsl:with-param>

          Der Wert des Paremters ist hier ein String!

          <xsl:with-param name="ANDERE_VARIABLE" select="/ROOT/UNTERKNOTEN" />

          Grüße
          Thomas

          Danke für den Hinweis. Das habe ich soeben versucht. Bekomme leider immer denselben Fehler. Ich möchte praktisch,dass das Loop einmal über /ROOT/UNTERKNOTEN und ein anderes mal über /ROOT/ANDERENKNOTEN gemacht wird und nicht über den Wert des Elements "/ROOT/UNTERKNOTEN".

          Edy

          1. Halloo,

            Danke für den Hinweis. Das habe ich soeben versucht. Bekomme leider immer denselben Fehler. Ich möchte praktisch,dass das Loop einmal über /ROOT/UNTERKNOTEN und ein anderes mal über /ROOT/ANDERENKNOTEN gemacht wird und nicht über den Wert des Elements "/ROOT/UNTERKNOTEN".

            Dann machst du was noch immer falsch.
            Es ist an sich kein Problem sowas zu machen:

            <xsl:call-template name="meinTemplate">
             <xsl:with-param name="A" select="Konten1"/>
             <xsl:with-param name="B" select="Knoten2"/>
            </xsl:call-template>

            <xsl:template name="meinTemplate">
             <xsl:param name="A"/>
             <xsl:param name="B"/>
             <xsl:for-each select="$A//element">
              <xsl:if test="@attr = 'foo'">
               <Knoten3 attr="{$B}" />
              </xsl:if>
             </xsl:for-each>
            </xsl:template>

            Grüße
            Thomas