генерирование clrf независимо от способа - PullRequest
0 голосов
/ 15 ноября 2011

, имеющая длину строки около от 120

здесь ниже моей строки сообщения: CID_Ultimate_Ben_Details = pabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumar

1004 * Ex: длина сообщения 140

выхода требуется, как:

1 to 35 chars in first line
36 t0 70 chars in second line
71 to 105 chars in third line
106 to 140 in fourth line

здесь моя логика xslt:

<xsl:if test ="./CID_Ultimate_Ben_Details != '' " >
                <xsl:if test ="string-length(./CID_Ultimate_Ben_Details) != '11' and string-length(./CID_Ultimate_Ben_Details) != '8' ">
                    <xsl:if test="string-length(./CID_Ultimate_Ben_Details) &gt; 1">
                        <xsl:value-of select="concat(':58D:',substring(./CID_Ultimate_Ben_Details,1,35))" />
                    </xsl:if>
                    <xsl:if test="string-length(./CID_Ultimate_Ben_Details) &gt; 35">
                        <xsl:value-of select="concat('&#10;',substring(./CID_Ultimate_Ben_Details,36,70))" />
                    </xsl:if>
                    <xsl:if test="string-length(./CID_Ultimate_Ben_Details) &gt; 70">
                        <xsl:value-of select="concat('&#10;',substring(./CID_Ultimate_Ben_Details,71,105))" />
                    </xsl:if>
                    <xsl:if test="string-length(./CID_Ultimate_Ben_Details) &gt; 105">
                        <xsl:value-of select="concat('&#10;',substring(./CID_Ultimate_Ben_Details,106,140))" />
                    </xsl:if>
                </xsl:if>

                <xsl:text>&#13;</xsl:text >
            </xsl:if>

вывод необходим как: : 58D: pabbisettishanmukhpraveenkumarpabbiладишанмухправеенкумарпаббисетти Шанмукхравравенкумарпаббисетра

**5выходной будет таким:

: 58D: паббисеттишанмухправеенкумарпабби саундишанмухправеенкумарпаббисеттишанмухправеенкумарпаббисеттишанм шанмукхправеенкумарпаббисеттишанм шанмукхправеенкумарпаббисеттишанм шанмукхправенмармарпаббисеттишанм шанмукхправеенпаббисеттишанм шанмукхправенмамарпаббисеттишанман

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Третий аргумент substring() - это требуемая длина, а не конечная позиция, как в Java.

0 голосов
/ 15 ноября 2011

Вот правильное и общее (работает для любой длины текста и количества строк вывода) решение XSLT 1.0 (решение XSLT 2.0 действительно элементарно):

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

 <xsl:param name="pmsgLength" select="140"/>
 <xsl:param name="pnumLines" select="4"/>

 <xsl:variable name="vmaxLineLength" select=
  "ceiling($pmsgLength div $pnumLines)"/>

 <xsl:template match="/*/text()" name="split">
  <xsl:param name="pText" select="."/>
  <xsl:param name="pnextLines" select="$pnumLines"/>
  <xsl:param name="pHead" select="':58D:'"/>

    <xsl:if test="$pnextLines">
     <xsl:value-of select=
      "concat('&#xA;',$pHead, substring($pText, 1, $vmaxLineLength))"/>

      <xsl:call-template name="split">
       <xsl:with-param name="pText" select="substring($pText, $vmaxLineLength+1)"/>
       <xsl:with-param name="pnextLines" select="$pnextLines -1"/>
       <xsl:with-param name="pHead" select="''"/>
      </xsl:call-template>
    </xsl:if>
 </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к следующему документу XML :

<t>pabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumar</t>

желаемый, правильный вывод получается :

:58D:pabbisettishanmukhpraveenkumarpabbi
settishanmukhpraveenkumarpabbisetti
shanmukhpraveenkumarpabbisettishanm
ukhpraveenkumar
...