Thomas J.S.: Eltern-Element ansprechen

Beitrag lesen

Hallo,

Wenn ich mit XSL nun das <text>-Element bearbeitet, weiss ich nicht, wie ich die Verlinkung machen kann. Irgendwie muss ich merken, ob ich zu einer <page> verlinke oder zu einem <field>. Wenn zu einem Field, dann muss dieselbe seite aufgerufen werden mit der id des Fields als Anker.

Ich möchte einmal einen Link zu einer Seite konstruieren mit index.php?id=xx und einmal als Anker, wenn ich zu einem Field verlinke mit index.php?id=xx#xx

---------
 <xsl:template match="text">
  xsl:choose
   <xsl:when test="parent::page/link">
    <p>
     <a href="{concat('index.php?id=', parent::page/@id)}">
     <xsl:value-of select="const" />
     <!-- was auch immer "const" für ein Element ist, es sollte innerhalb vom text stehen sonst wird es nciht gefunden  -->
     </a>
    </p>
   </xsl:when>
   <xsl:when test="parent::field/link">
    <p>
     <a href="{concat('index.php?id=', ancestor::page[1]/@id, '#', parent::field/@id)}">
      <xsl:value-of select="const" />
      <!-- was auch immer "const" für ein Element ist, es sollte innerhalb vom text stehen sonst wird es nciht gefunden  -->
     </a>
    </p>
   </xsl:when>
   xsl:otherwise
    <p>
     <xsl:value-of select="."/>
    </p>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
------

parent::page/link prüft ob <text> im <page> steht und ob <page> ein <link> enthält, parent::field/link geht analog.

Falls <text> in einem <flied> steht, verweist "ancestor::page[1]" auf das erste <page> (vom <text> aus gesehen) was oberhalb vom <text> steht (falls innerhalb vom <page> kein anderes <page> vorkommen kann, kannst du das [1] auch weglassen)

Grüße
Thomas