RE: How to pad space to a text node to make it have specfic lengt h?

Subject: RE: How to pad space to a text node to make it have specfic lengt h?
From: Nate Austin <naustin@xxxxxxxxxxxxxxx>
Date: Wed, 18 Oct 2000 10:48:55 -0500
Albert -
These are the templates I use to pad on the left or right with any character
passed in:

  <xsl:template name="prepend-pad">    <!-- recursive template to right
justify and prepend-->
                                       <!-- the value with whatever padChar
is passed in   -->
    <xsl:param name="padChar"> </xsl:param>
    <xsl:param name="padVar"/>
    <xsl:param name="length"/>
    <xsl:choose>
      <xsl:when test="string-length($padVar) &lt; $length">
        <xsl:call-template name="prepend-pad">
          <xsl:with-param name="padChar" select="$padChar"/>
          <xsl:with-param name="padVar" select="concat($padChar,$padVar)"/>
          <xsl:with-param name="length" select="$length"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="substring($padVar,string-length($padVar) -
$length + 1)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="append-pad">    <!-- recursive template to left
justify and append  -->
                                      <!-- the value with whatever padChar
is passed in   -->
    <xsl:param name="padChar"> </xsl:param>
    <xsl:param name="padVar"/>
    <xsl:param name="length"/>
    <xsl:choose>
      <xsl:when test="string-length($padVar) &lt; $length">
        <xsl:call-template name="append-pad">
          <xsl:with-param name="padChar" select="$padChar"/>
          <xsl:with-param name="padVar" select="concat($padVar,$padChar)"/>
          <xsl:with-param name="length" select="$length"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="substring($padVar,1,$length)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

The 'padChar' param passed in could be as many characters as you want,
actually.  'padVar' is the variable to pad, and length is length, obviously.
Most of the XSLT I do is for fixed-length text files, and these haven't
failed me yet.

Hope this helps,
Nate

>Date: Wed, 18 Oct 2000 16:46:26 +0800
>From: "Albert Tsun" <albert.tsun@xxxxxxxxxxxx>
>Subject: How to pad space to a text node to make it have specfic length?
>
>Hi all,
>
>I am trying hard to pad space to a text node so that the data value
>will have a specific length.
>
>XML Source :
><records>
>     <record>
>          <field1>abc</field1>
>          <field2>abcdef</field2>
>     </record>
>     <record>
>          <field1>123</field1>
>          <field2>12345</field2>
>     </record>
></records>
>
>My current task is to transform it to a fixed length record files which
>look like
>abc  |    abcdef|
>123  |     12345|
>
>
>I want to pass the <field1> to template "padleft" with field1 text node and
>desired length
>and <field2> to "padright" in order to make a fixed length output. However,
>with all the
>String functions in XSLT, I can't figure out how I can implement this.
>would some help me
>and give me some sample code, please.


>XSL :
><xsl:template name="padleft">
>     <xsl:param name="src"/>
>     <xsl:param name="len"/>
>
>     <.????? How to pad spaces to $src to make it a $len longed text
>????????>
>
>
></xsl:template>
>
>Many Thanks in advance


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread