Bastian G.: Verlinktes Inhaltsverzeichnis erstellen

Hallo XSL(T)-Wizzards,

Zu vielen gegebenen XML Datei(en), die ich nicht verändern darf, soll ich durch XSLT eine HTML erzeugen - soweit so gut alles klein Problem. Jetzt möchte ich noch ein klickbares Inhaltsverzeichnis generieren, wie man das kennt: Im HTML oben stehen dann die Links und bei Klick darauf wird zur jeweiligen Stelle gesprungen.

Das XML sieht so aus (stark vereinfacht)

<root>  
<inhaltsverzeichnis>  
<inhalt>link1</inhalt>  
<inhalt>link2</inhalt>  
</inhaltsverzeichnis>  
...  
<content>  
<inhaltstitel>link1-titel</inhaltsitel><text>lorem.ipsum1</text>  
<inhaltstitel>link2-titel</inhaltsitel><text>lorem.ipsum2</text>  
</content>  
</root>

--------------------------------------

Auszug aus meinem bisherigem XSL:

<xsl:template match="//inhaltsverzeichnis/inhalt">  
<xsl:for-each select=".">  
	<p>  
	<a href="#{generate-id()}"><xsl:value-of select="text()"/></a>  
	</p>  
	</xsl:for-each>  
</xsl:template>  
...  
<xsl:template match="//content">  
<xsl:for-each select="inhaltstitel">  
<h3><a name="{generate-id(//inhaltverzeichnis/inhalt)}"><xsl:value-of select="text()"/></a></h3>  
	</xsl:for-each>  
</xsl:template>

Im HTML wird mir nur für das Inhaltsverzeichnis (oben) IDs in das a href geschrieben, und genau die gleiche ID benötige ich nun für das a name im Content (unten). Wie "übernehme" ich diese ID? - das der Sprunganker von oben nach unten funktioniert. Bzw. wo ist mein Denkfehler? Bin dankbar für jegliche Hinweise, viele Grüße aus Stuttgart :)

  1. @@Bastian G.:

    nuqneH

    <h3><a name="{generate-id(//inhaltverzeichnis/inhalt)}"><xsl:value-of select="text()"/></a></h3>

    Was soll denn das? a[@name] für Sprungmarken ist seit Urzeiten überflüssig; jedes Element mit @id kann angesprungen werden:

    <h3 id=""></h3>

    Wie "übernehme" ich diese ID?

    Gar nicht. Du hast sie doch im Inhalt der 'inhaltstitel'-Elemente ("link1-titel") zur Verfügung, du musst lediglich das "-titel" abschneiden. XPath: http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#substring@title=substring(), http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#string_length@title=string-length().

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Hallo Gunnar,
      Danke für deine Antwort, aber ich kann dir nicht ganz folgen :(

      Das a[@name] überflüssig ist, habe ich soweit verstanden, dann werde ich einfach das <h3> anspringen wie du geschrieben hast.

      Allerdings, habe ich doch für das Element keine ID, die möchte ich mir ja oben im Inhaltsverzeichnis erzeugen. Diese Inhaltsverzeichnis-links bekommen dann nen <a href="#erzeugte_id">

      Und diese erzeugt ID, soll dann unten (im Content) auch bekannt sein und in ebenjenes <h3 id="..."> eingesetzt werden, sodass der Sprung funktioniert.

      Ausschneiden mit Substring muss ich nichts, der Inhalt den ich da gewählt hatte ("link1-titel") war einfach nur zur Demo.

      p.s. ich kann leider kein klingonisch

      @@Bastian G.:

      nuqneH

      <h3><a name="{generate-id(//inhaltverzeichnis/inhalt)}"><xsl:value-of select="text()"/></a></h3>

      Was soll denn das? a[@name] für Sprungmarken ist seit Urzeiten überflüssig; jedes Element mit @id kann angesprungen werden:

      <h3 id=""></h3>

      Wie "übernehme" ich diese ID?

      Gar nicht. Du hast sie doch im Inhalt der 'inhaltstitel'-Elemente ("link1-titel") zur Verfügung, du musst lediglich das "-titel" abschneiden. XPath: http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#substring@title=substring(), http://de.selfhtml.org/xml/darstellung/xpathfunktionen.htm#string_length@title=string-length().

      Qapla'

      1. @@Bastian G.:

        nuqneH

        Ausschneiden mit Substring muss ich nichts, der Inhalt den ich da gewählt hatte ("link1-titel") war einfach nur zur Demo.

        Ach so.

        Wie sieht dem dein XML nun wirklich aus? Woraus willst du die IDs generieren: aus 'inhaltsverzeichnis/inhalt' oder aus 'content/inhaltstitel'? Wenn letzteres, wozu dient 'inhaltsverzeichnis'?

        p.s. ich kann leider kein klingonisch

        Ich kann auch nur die Touri-Floskeln.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)