2011-11-15 1 views
0

ayant une longueur de chaîne environ 120génération CLRF de manière quelle que soit

ci-dessous ma chaîne de message: CID_Ultimate_Ben_Details = pabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumar

Ex: la longueur du message de 140

sortie requise en tant que:

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 

ici ma logique 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> 

sortie requise comme: : 58D: pabbisettishanmukhpraveenkumarpabbi settishanmukhpraveenkumarpabbisetti shanmukhpraveenkumarpabbisettishanm ukhpraveenkumar

mais maintenant pour la sortie logique ci-dessus vient en tant que tel:

: 58D: pabbisettishanmukhpraveenkumarpabbi settishanmukhpraveenkumarpabbisettishanmukhpraveenkum arpabbisettishanm shanmukhpraveenkumarpabbisettishanmukhpraveenkumar ukhpraveenkumar

pourquoi il générait CLRF dans un manner.can, quel que soit on me suggère plaît à achive ma puissance nécessaire

Répondre

0

Voici une bonne et générale (travail pour tout texte de longueur et le nombre de lignes de sortie) solution XSLT 1,0 (la solution XSLT 2.0 est vraiment élémentaire):

<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> 

Lorsque cette transformation est appl ié sur le document XML suivant:

<t>pabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumarpabbisettishanmukhpraveenkumar</t> 

la sortie désirée, correcte est produite:

:58D:pabbisettishanmukhpraveenkumarpabbi 
settishanmukhpraveenkumarpabbisetti 
shanmukhpraveenkumarpabbisettishanm 
ukhpraveenkumar 
0

Le troisième argument de substring() est la longueur requise, et non la position finale comme en Java.

Questions connexes