Thomas J.S.: Eltern-Element ansprechen

Beitrag lesen

Hallo,

Verstehst Du was ich meine?

Ich bin nicht sicher, dass ich dich verstanden habe.

schonmal vielen dank für deine Hilfe. Nur etwas habe ich vielleicht falsch beschrieben. Also ein <text> im <page> kann sowohl zu einer neuen seite zeigen als auch einen Anker sein. Analog für ein <text> in <field>.

Also <link> enthält immer die ID auf die er weiwesen soll. Ich kann aus deinem XML nicht wirklich folgen ob diese ID wirklich in ID ist, d.h. eine Zahl als ID kann nur wirklich einmal vorkommen? (auch deshalb sind Zahlen schlecht als ID)

Darum habe ich mir gedacht, ich muss eigentlich gucken, ob das Element zwischen <link> und </link> auf eine Seite oder ein Field verweist und von da dann meine Links bauen.

Also um einen Anker zu machen, musste ich sowas wie: <xsl:when test="field[@id = child::link]">. Nach dem Motto, habe ich ein Field gefunden, deren ID= das Link-element, mache ich einen Anker und analog für Seiten.

Wenn ich dich richtig verstanden habe, dann sollte das so gehen:
(Problem wäre aber hiebei, wenn es mehrere <link>s im <page> oder im <field> gäbe)

Grüße
Thomas
----------
 <xsl:template match="text">
  <xsl:variable name="link">
   xsl:choose
    <xsl:when test="parent::page/link">
     <xsl:variable name="plink" select="parent::page/link" />
     xsl:choose
      <xsl:when test="//page[@id = $plink]">
       <xsl:value-of select="concat('?id=', //page[@id = $plink]/@id)"/>
      </xsl:when>
      <xsl:when test="//field[@id = $plink]">
       <xsl:value-of select="concat('?id=', //page/field[@id = $plink]/@id,  '#', $plink)"/>
      </xsl:when>
     </xsl:choose>
    </xsl:when>
    <xsl:when test="parent::field/link">
     <xsl:variable name="flink" select="parent::field/link" />
     xsl:choose
      <xsl:when test="//page[@id = $flink]">
       <xsl:value-of select="concat('?id=', //page[@id = $flink]/@id)"/>
      </xsl:when>
      <xsl:when test="//field[@id = $flink]">
       <xsl:value-of select="concat('?id=', //page/field[@id = $flink]/@id,  '#', $flink)"/>
      </xsl:when>
     </xsl:choose>
    </xsl:when>
   </xsl:choose>
  </xsl:variable>
  xsl:choose
   <xsl:when test="parent::page/link">
    <p>
     <a href="{concat('index.php', $link)}">
     <xsl:value-of select="const" />
     </a>
    </p>
   </xsl:when>
   <xsl:when test="parent::field/link">
    <p>
     <a href="{concat('index.php', $link)}">
      <xsl:value-of select="const" />
     </a>
    </p>
   </xsl:when>
   xsl:otherwise
    <p>
     <xsl:value-of select="."/>
    </p>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>