2016-09-13 3 views
0

So erstellen Sie eine alphabetische Liste mit einem Link in xslt wie z.So erstellen Sie eine alphabetische Liste in xslt

<a href="sample.htm?letter=A">A</a> 
<a href="sample.htm?letter=B">B</a> 
<a href="sample.htm?letter=C">C</a> 
...up to.. 
<a href="sample.htm?letter=Z">Z</a> 

kann es sein, dann ein XML-

<node> 
    <letter>ABCDEFGHIJKLMNOPQRSTUVWXYZ</text> 
</node> 

verwandeln oder einfach nur einen varible?

<xsl:variable name="letter">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable> 

Antwort

0

Nach vielen Tests. Endlich hab ich es! Für diejenigen, die es für zukünftige Referenz benötigen. Hier ist mein Code.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 

<xsl:variable name="url">sample.htm</xsl:variable> 
<xsl:template match="node"> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="letter"> 
    <xsl:call-template name="element"><xsl:with-param name="text" select="."/></xsl:call-template> 
</xsl:template> 

<xsl:template name="element"> 
    <xsl:param name="text"/> 

    <xsl:variable name="token" select="substring($text, 1, 1)" /> 

    <xsl:if test="$token"> 
     <a href="{$url}?letter={$token}"><xsl:value-of select="$token"/></a><br/> 
    </xsl:if> 

    <xsl:if test="string-length($text) > 1"> 
     <xsl:call-template name="element"> 
      <xsl:with-param name="text" select="substring($text, 2, string-length($text) - 1)"/> 
     </xsl:call-template> 
    </xsl:if> 

</xsl:template> 

</xsl:stylesheet> 

wenn Sie eine bessere oder einfachere Lösung haben freundlicherweise kommentieren.

1

XSLT 1,0

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:output method="html"/> 

    <xsl:variable name="url">sample.htm</xsl:variable> 
    <xsl:variable name="letter">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable> 

    <xsl:template match="/"> 
     <xsl:call-template name="iterate"> 
      <xsl:with-param name="string" select="$letter"/> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="iterate"> 
     <xsl:param name="string"/> 
     <xsl:param name="length" select="1" /> 

     <xsl:if test="string-length($string)"> 

      <xsl:variable name="char" select="substring($string, 1, 1)" /> 

      <xsl:call-template name="createEntry"> 
       <xsl:with-param name="token" select="$char"/> 
      </xsl:call-template> 

      <xsl:call-template name="iterate"> 
       <xsl:with-param name="string" select="substring-after($string, $char)" /> 
      </xsl:call-template> 
     </xsl:if>   
    </xsl:template> 

    <xsl:template name="createEntry"> 
     <xsl:param name="token"/> 
     <a href="{$url}?letter={$token}"><xsl:value-of select="$token"/></a><br/> 
    </xsl:template> 

</xsl:stylesheet> 

Erklärung

Shop das Alphabet in eine Variable wie Sie vorgeschlagen.

Übergeben Sie die gesamte Zeichenfolge in eine Funktion iterate als param string. [optionaler Parameter: length]

Übergeben Sie das einzelne Zeichen an die Funktion createEntry.

Funktion createEntry führt die Ausgabe.

Wenn Sie möchten, gibt ihm einen bis

+0

Danke Sir. Es ist besser, denke ich :) Ich werde es aufgeben – mrrsb

Verwandte Themen