如何为每35个字符的n个字符串生成一个crlf

时间:2011-08-07 11:43:39

标签: xml xslt

假设我的消息字符串长度大约为140(无论如何都超过35个字符)。 我需要使用换行符来分割我的字符串。

例如:消息长度为140

输出所需的输出为:

  • 第一行1到35个字符
  • 36 t0第二行70个字符
  • 第三行71到105个字符
  • 第四行106到140

任何人都可以为我提出一些逻辑吗?

4 个答案:

答案 0 :(得分:1)

这是一个递归模板,具有可配置的参数,用于行的长度和要追加到末尾的字符。

<xsl:template name="word-wrap">
   <xsl:param name="str"/>
   <xsl:param name="line-length" select="35"/>
   <xsl:param name="line-ending" select="'&#xA;'"/>

   <xsl:choose>
      <xsl:when test="string-length($str)&gt;$line-length">

         <xsl:value-of select="substring($str,0,$line-length)"/>
         <xsl:value-of select="$line-ending"/>

         <xsl:call-template name="word-wrap">
            <xsl:with-param name="str" select="substring($str,$line-length)" />
            <xsl:with-param name="line-length" select="$line-length" />
            <xsl:with-param name="line-ending" select="$line-ending" />
         </xsl:call-template>

      </xsl:when>
      <xsl:otherwise>
         <xsl:value-of select="$str"/>
      </xsl:otherwise>

   </xsl:choose>

</xsl:template>

可以像这样调用:

<xsl:call-template name="word-wrap">
  <xsl:with-param name="str" select="'Suppose my message string length was about 140 (more than 35 characters anyway). I need to split my string by using line feed.'"/>
</xsl:call-template>

并生成以下输出:

Suppose my message string length w
as about 140 (more than 35 charact
ers anyway). I need to split my st
ring by using line feed.

注意:,这没有任何逻辑可以解释分割的单词边界或单词的连字符。

答案 1 :(得分:0)

您是否尝试过简单地每35个字符连接一次“\ r \ n”。只要使用一个循环计数器,只要计数器小于字符串的长度,每次增加35,只需使用子串和连接。

答案 2 :(得分:0)

维基百科上有一个描述算法的条目:

http://en.wikipedia.org/wiki/Word_wrap

答案 3 :(得分:0)

只有固定线条,您可以对其进行硬编码:

<xsl:template match="whatever">
  <xsl:value-of select="substring(.,1,35)" />
  <xsl:if test="string-length(.) &gt; 35"><xsl:value-of select="concat('&#10;',substring(.,36,70))" /></xsl:if>
  <xsl:if test="string-length(.) &gt; 70"><xsl:value-of select="concat('&#10;',substring(.,71,105))" /></xsl:if>
  <xsl:if test="string-length(.) &gt; 105"><xsl:value-of select="concat('&#10;',substring(.,106,140))" /></xsl:if>
</xsl:template>

不可否认原油,但有效。