2012-01-23 32 views
0

我有這樣XSLT:如何動態循環並調用模板和顯示項目?

<info>list1</info> 
<count>24</count> 
<rtag>1111</rtag> 
<rtag>2222</rtag> ------upto 24 rtags 

的XML我想要顯示的內容如下

list1 1111 2222 3333 ----------upto 10 items{next line} 
      1011 1022 1033-----------upto 10 times{next line} 
      1001 1002 1003--till remaining items 

這裏在這種情況下,我從backend.I獲得數要顯示的項目,如所示以上動態使用計數值通過調用template.can任何人請幫助我得到這個?

+0

所以輸出格式應該是純文本?請創建實際匹配*的樣本XML和樣本輸出。另外:有多少「列表」?他們是如何分開的? – Tomalak

+0

頁面中會有20個列表,每個列表可能包含n個rtags.everything將被排列成行和coloumns。 – VinayHere

+0

@VinayHere,count標記是否包含rtags的數量? –

回答

0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="Windows-1252" /> 
    <xsl:strip-space elements="*" /> 

    <xsl:variable name="padding1" select="'  '" /><!-- first col --> 
    <xsl:variable name="padding2" select="'  '" /> <!-- remaining cols --> 
    <xsl:variable name="per-row" select="10" />  <!-- column count --> 

    <xsl:template match="list"> 
    <xsl:value-of select="info" /> 
    <xsl:value-of select="substring($padding1, string-length(info) + 1)" /> 
    <xsl:apply-templates select="rtag" /> 
    </xsl:template> 

    <xsl:template match="rtag"> 
    <xsl:choose> 
     <xsl:when test="position() mod $per-row = 1 and position() &gt; 1"> 
     <xsl:value-of select="$padding1" /> 
     <xsl:call-template name="padded-value" /> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:call-template name="padded-value" /> 
     <xsl:if test="position() mod $per-row = 0 or position = last()"> 
      <xsl:value-of select="'&#10;'" /> 
     </xsl:if> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

    <xsl:template name="padded-value"> 
    <xsl:value-of select="substring($padding2, string-length() + 1)" /> 
    <xsl:value-of select="." /> 
    </xsl:template> 
</xsl:stylesheet> 

施加到

<list> 
    <info>list1</info> 
    <count>24</count> 
    <rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag> 
    <rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag> 
    <rtag>222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag> 
    <rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag> 
    <rtag>333</rtag><rtag>3333</rtag><rtag>3333</rtag><rtag>3333</rtag> 
</list> 

產生

 
list1  1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 
      222 2222 2222 2222 2222 2222 2222 2222 2222 2222 
      333 3333 3333 3333