sonja: Ausschliessen von Knoten bei for-each

Beitrag lesen

Hallo

Ich habe ein XML Dokument, das folgendermaßen aufgebaut ist:

<Seite>
  <Kapitel>
    <Block> 1. Text </Block>
    <Unterkapitel>
      <Block> 2. Text</Block>
    </Unterkapitel>
    <Seite>
      <Unterkapitel>
        <Block> 3. Text </Block>
      </Unterkapitel>
    </Seite>
  </Kapitel>
</Seite>

Ich befinde mich jetzt im 1. <Seite> Tag und möchte jetzt gerne die Blöcke mit dem 1. und 2. Text auslesen, aber nicht der mit dem 3. Text. Konkret will ich, dass er das untergeordnete <Seite> Tag komplett ignoriert! Wie ist das möglich? Gibt es sowas ähnliches wie <xsl:for-each select"not(Seite)">???

Hallo

ich hoffe du arbeitest in der xsl auch mit apply template aufrufen oder?
naja jedenfalls sollte das in der xsl dann so aussehen:

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

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

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

<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>

Sonja