Einen schönen Guten Tag liebes Forum,
mich macht momentan ein kleines Problem verrückt - ich weiß zwar wo das Problem liegt, leider fällt mir keine passende Lösung ein.
Zur XML- Source. Man stelle sich einen Text vor, mit unterschiedlichen Hierarchieebenen und das Element Entry soll herausgefiltert werden. Entry wird jedoch zweifach über einen Modus verarbeitet. Ist der Eintrag im Text, wird ein interner Anker gesetzt, während im modus="div_box" der Inhalt des Entries steht + rückwärtiger Anker zum Text.
d.h. in der Quelldatei steht irgendwo:
<entry>
<p>Hier steht ein Absatz</p>
<p>Hier gehts eventl. weiter</p>
</entry>
Zielform (also HTML):
im Text steht:<a id="up_1" href="down_1">1</a>
und unter dem Text als div-container:
<div>
<a id="down_1" href="up_1">1</a>
<pa>Hier steht ein Absatz</pa>
<pa>Hier gehts eventl. weiter</pa>
</div>
- Jeder Eintrag wird also in einen Container geladen. Die Variable ist immer die Zahl (also hier 1). Um diese zu erstellen, habe ich folgendes getan:
<xsl:template match="entry">(für Anker im Text)
<xsl:variable name="num">
<xsl:number format="1" count="any"/>
</xsl:variable>
<a id="up_{$num}" href="down_{$num}">$num</a>
</xsl:template>
<xsl:template match="entry" mode="div_box">(für div-container unterm Text)
<xsl:variable name="num">
<xsl:number format="1" count="any"/>
</xsl:variable>
<div>
<a id="down_{$num}" href="up_{$num}">$num</a>
xsl:apply-templates/
</div>
</xsl:template>
<xsl:template match="pa">
<p>
xsl:apply-templates/
</p>
</xsl:template>
Die Funktion position() funktioniert nicht, da die entries in unterschiedlichen Hierarchien auftreten können. Soweit funktioniert es ja. Nun wollte ich die Variable global definieren. In einem Text mit 4 Fußnoten würde dann ein Wert von "1234" ausgegeben werden - logisch, weil ja die Varibale soz. außerhalb des Kontexts steht und soz. fertig ist, bevor sie in den beiden templates verwendet wird. Kann an dieser Stelle eine globale Variable erstellt werden? Und wenn ja, wie?
Ich hoffe, meine Darlegung war ausreichend und ich freue mich auf antworten.
In diesem Sinne. Nero