hh: linkbase auswertung mit xsl?

Hi,

ich brauche mal wieder etwa starthilfe. ich habe eine xlink linkbase vorliegen, die ich nun mit xsl abfragen möchte. mir fällt leider keine bessere bezeichnung ein. am besten ein beispiel:

<link xlink:type="extended"
    xlink:role="http://fahbentor.daimi.au.dk/gt">

<loc xlink:type="locator"
      xlink:href="..."
      xlink:label="v1"/>

<loc xlink:type="locator"
      xlink:href="..."
      xlink:label="v2"/>

<loc xlink:type="locator"
      xlink:href="..."
      xlink:label="v3"/>

<loc xlink:type="locator"
      xlink:href="..."
      xlink:label="v4"/>

<loc xlink:type="locator"
      xlink:href="..."
      xlink:label="v5"/>

<loc xlink:type="locator"
      xlink:href="..."
      xlink:label="v6"/>

<arc xlink:type="arc" xlink:from="v1" xlink:to="v2"/>
 <arc xlink:type="arc" xlink:from="v5" xlink:to="v6"/>
 <arc xlink:type="arc" xlink:from="v2" xlink:to="v4"/>
 <arc xlink:type="arc" xlink:from="v1" xlink:to="v5"/>
 <arc xlink:type="arc" xlink:from="v2" xlink:to="v3"/>
</link>

Als ergebnis möchte ich nun eine art schleife in xsl haben, die mir aus der linkbase die werte etwa so holt, damit ich dann in weitere templates die ermittelten werte weiterverarbeiten kann:

v1 (stufe1)
 v2 (stufe2)
  v3 (stufe3)
  v4 (stufe3)
 v5 (stufe2)
  v6 (stufe3)

Löse ich das nun mit einer for-each oder mit einem rekursive template? Ich hoffe das Problem ist erkenntlich. Zudem suche ich immernoch eine gute seite, die mir xlink etwas verständlich machen kann, da ich zwar die grundidee verstehe, aber anschaulich wird es bei mir erst guten beispielen.

Gruß,

Holger

  1. Hallo Holger

    Ich würde es mal mit sowas versuchen:

    <xsl:template match="/">
     <xsl:for-each select="//arc">
      <!-- Ist der Linkt auf oberster Stufe? (kommt nicht in to for) -->
      <xsl:if test="@from!=//arc/@to">
       <xsl:apply-templates match="arc">
        <xsl:with-param name="stufe" select="1" />
       </xsl:apply-templates>
      </xsl:if>
     </xsl:for-each>
    </xsl:template>

    <xsl:template match="arc">
     <xsl:param name="stufe" />
     <!-- Link ausgeben -->
     <p><xsl:attribute name="class">
         stuffe<xsl:value-of select="$stufe" />
        </xsl:attribute>
        <xsl:value-of select="@from" />
     </p>
     <!-- Unterelemente suchen -->
     <xsl:for-each select="@to=//arc/@from" />
       <!-- Rekursion -->
       <xsl:apply-templates match="arc">
        <xsl:with-param name="stufe" select="$stufe+1" />
       </xsl:apply-templates>
     </xsl:for-each>
    </xsl:template>

    Ich hab's nicht ausprobiert, in der Art müsste es jedoch funktionieren. Vor allem die XPath-Ausdrücke musst du dir nochmals genauer anschauen, die kann ich noch nicht so gut aus dem FF.

    Gruss

    Tom2