Thomas J.S.: Ausschliessen von Knoten bei for-each

Beitrag lesen

Hallo,

naja jedenfalls sollte das in der xsl dann so aussehen:

Darf ich ein paar leise Zweifel anmelden?

<xsl:template match="Seite">
<xsl:apply-templates select="Kapitel" />
<xsl:apply-templates select="Unterkapitel" />
</xsl:template>

Tja, damit hat er auch in der inneren <Seite> _alle_ Kapitel und somit (nach deiner Templatestruktur) wiederum _alle_ Seite(n) dabei. Du hast damit eine wunderschöne Endlosschleife erzeugt, das ist kaum gewollt.

<xsl:template match="Kapitel">
<xsl:apply-templates select="Block" />
<xsl:apply-templates select="Unterkapitel" />
<xsl:apply-templates select="Seite" />
</xsl:template>

Gilt das selbe wie oben:
Seite ruft Kapitel auf --> Kapitel ruft Seite auf --> Seite ruft Kapitel auf -->usw. usf.

<xsl:template match="Block">
xsl:choose
<!-- damit frägst du ab ob das "übernächst-höhere" Element kapitel ist, das wort test ist festgelegt und bleibt so stehen -->
<xsl:when test="name(../..)='Kapitel'">
  <xsl:value-of select="." />
</xsl:when>
</xsl:choose>
</xsl:template>

Da fehlt die Bedingung für Blocks deren parent::node() nicht Kapitel ist.

Irgendwie nicht das Wahre. Was meinst du?

Grüße
Thomas