XSLT在每个字符上分割字符串

时间:2014-09-11 06:55:34

标签: xslt

我有一个字符串:“ABCDEFGHI” 我想在xslt中输出为A,B,C,D,E,F,G,H,I -

我一直在使用 -

<xsl:variable name="string_Comma_Delimited">a,b,c,d,e,f,g,h,i</xsl:variable>

<xsl:call-template name="parseString">
  <xsl:with-param name="list" select="$string_Comma_Delimited"/>
 </xsl:call-template>


<xsl:template name="parseString">
<xsl:param name="list"/>

<xsl:if test="contains($list, ',')">
     <fo:table-cell border-width="0.000pt " border-style="solid" border-color="rgb(0,0,0)" padding-top="4.000pt">
        <fo:block-container  height="6mm" border-width="0.200pt" border-style="solid" border-color="rgb(0,0,0)" text-align="center">
        <fo:block text-align="center">
                <xsl:value-of select="substring-before($list, ',')"/>
        </fo:block>
        </fo:block-container>
    </fo:table-cell>
 <xsl:call-template name="parseString">
  <xsl:with-param name="list" select="substring-after($list, ',')"/>
 </xsl:call-template>
</xsl:if>

</xsl:template>

1 个答案:

答案 0 :(得分:4)

您当前的模板用逗号分隔字符串。要简单地将其拆分为每个字符,您仍然可以使用递归模板。所有模板都会使用substring输出第一个字符,然后,如果字符串的长度是2个或更多字符,则递归地使用字符串的剩余部分调用模板。

试试这个

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

给定INDIA作为输入,输出以下内容:

<letter>I</letter>
<letter>N</letter>
<letter>D</letter>
<letter>I</letter>
<letter>A</letter>

现在,如果您使用的是XSLT 2.0,则可以使用xsl:analyze-string函数来实现相同的

<xsl:template name="parseString">
    <xsl:param name="text"/>
    <xsl:analyze-string select="$text" regex=".">
        <xsl:matching-substring>
            <letter>
                <xsl:value-of select="." />
            </letter>
        </xsl:matching-substring>
    </xsl:analyze-string>
</xsl:template>

(当然,如果你使用的是XSLT 2.0,你可以在第一种情况下使用tokenize来分割逗号分隔的字符串)