Thomas J.S.: Elemente referenzieren auf weitere XML Dokumente

Beitrag lesen

Hallo,

danke für deine schnelle Antwort (ich bin der Poster Alex, habe mich jetzt registriert ;-) ).

Das freut mich! :)

Mit deiner Lösung komme ich nun gut voran, das einzige mit dem ich jetzt ein Problem habe, das ich eine forlaufende Nummerierung der schon "gecheckten" XML Dokuemente erzeugen möchte. Ich habe mir erstmal beholfen, in dem mit dem Parameter"FrameID" das xsl:template aufrufe:

So wenn das Template alle Dokumente für einen Root-Widgets abgearbeitet hat kehrt es zum Ausgangsdokument zurück und wendet das Template auf das nächste Widget Element an. Dabei wird auch mein Parameter "FrameID" wieder auf 0 gesetzt, eigentlich möchte ich eine fortlaufende Nummer. Gibt es da eine Lösung ?

<xsl:template match="/">
 <xsl:apply-templates select="WidgetStructure/ComposedWidget/Elements/Element/Widget" mode="FrameID" />
</xsl:template>

<xsl:template match="Widget" mode="FrameID">
 <xsl:param name="FrameID">
  xsl:choose
   <xsl:when test="not(parent::Widget)"><xsl:value-of select="position()+count(preceding-sibling::Widget//Widget)" /></xsl:when>
   xsl:otherwise0</xsl:otherwise>
  </xsl:choose>
 </xsl:param>
 <xsl:value-of select="$FrameID"/>
 <xsl:apply-templates select="document(concat(@Path,'/',@FileNamePrefix,'.xml'))/WidgetStructure/ComposedWidget/Elements/Element/Widget" mode="FrameID">
  <xsl:with-param name="FrameID" select="$FrameID+1"/>
 </xsl:apply-templates>
</xsl:template>

Variablen lassen sich ja nicht überschreiben oder doch ?!

Jein. z.B.
   <xsl:value-of select="$FrameID"/>
   <xsl:variable name="x" select="$FrameID+1" />
   <xsl:apply-templates select="...." mode="FrameID">
      <xsl:with-param name="FrameID" select="$x"/>
   </xsl:apply-templates>

Der Wert von $x bleibt immer konstant, nämlich: $FrameID+1, dass $FrameID sich ändert, ist eine andere Sache. Die Variable wird bei jedem Aufruf des Templates neu erzeugt, und so weiss eine "frische" Variable nichts von einer "alten". Manchmal ist das verwirrend ;-)

Grüße
Thomas