2012-01-10 61 views
2
转换字符到XML节点
<xsl:variable name="string" select="'abcdefghijklmnopqrstuvwxyz'" /> 

我需要此字符串到一个节点,由5个字符,分组转换明显最后一个基团可以是小于或等于根据输入串5个字符使用XSLT

<node> 
    <a>abcde</a> 
    <a>fghij</a> 
    <a>klmno</a> 
    <a>pqrst</a> 
    <a>uvwxy</a> 
    <a>z</a> 
</node> 

回答

3

这种转变

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:param name="pStr" select="'abcdefghijklmnopqrstuvwxyz'" /> 
<xsl:param name="pChunkSize" select="5"/> 

<xsl:template match="/*"> 
    <node> 
    <xsl:call-template name="split"/> 
    </node> 
</xsl:template> 

<xsl:template name="split"> 
    <xsl:param name="pStr" select="$pStr" /> 
    <xsl:param name="pChunkSize" select="$pChunkSize"/> 

    <xsl:variable name="pRemLength" select="string-length($pStr)"/> 

    <xsl:if test="$pRemLength"> 
    <a><xsl:value-of select="substring($pStr, 1, $pChunkSize)"/></a> 

    <xsl:call-template name="split"> 
    <xsl:with-param name="pStr" select="substring($pStr, $pChunkSize+1)"/> 
    <xsl:with-param name="pChunkSize" select="$pChunkSize"/> 
    </xsl:call-template> 
    </xsl:if> 

</xsl:template> 
</xsl:stylesheet> 

当在任何XML文档(未使用)被应用时产生有用的,正确的结果

<node> 
    <a>abcde</a> 
    <a>fghij</a> 
    <a>klmno</a> 
    <a>pqrst</a> 
    <a>uvwxy</a> 
    <a>z</a> 
</node> 

说明原始递归没有字符串长度为停止状态,并每个递归步骤都会产生下一个块并从字符串中切割出来。

+0

太棒了。感谢您的解释:) – Suresh 2012-01-10 09:30:51

+0

@Maneesh:不客气。 – 2012-01-10 13:40:11