Hi Dave,

 

that should work with a straight forward xsl:choose statement and the XSL
functions number(), string-length() and substring() to convert your string
to a double.

 

I.e. something like:

 

<xsl:template name="StrToNumber">

  <xsl:param name="str" />

  <xsl:choose>

     <xsl:when test="starts-with($str, '&lt;') or starts-with($str,
'&gt;')">

        <xsl:value-of select="number(substring($str,
string-length('&lt;X')))" />

     </xsl:when>

     <xsl:otherwise>

        <xsl:value-of select="number($str)" />

     </xsl:otherwise>

  </xsl:if>

</xsl:template>

 

Extensive testing is left to the reader. :-)

 

Cheers,

Dominik

 

  _____  

From: Xmplar [mailto:i...@xmplar.biz] 
Sent: Friday, May 25, 2012 4:39 AM
To: Bob Stayton
Cc: DocBook Apps
Subject: Re: [docbook-apps] Aligning numbers in table cells with xsl

 

I managed to (almost) fix the problem by adding a test for NaN to the string
variable:

<xsl:if test="(ancestor-or-self::d:table/@tabstyle = 'numbers' or 
      ancestor-or-self::d:table/@tabstyle = 'numberstripe') and
not(ancestor::d:thead or
      ancestor::d:tfoot) and preceding-sibling::d:entry and
(string(number(.) != 'NaN'))">

This however will not select any cells that have a number and a non-numeric
string (such as greater than or less than signs: <1, or >20) - my test
treats those cells as a string and not as a number. I now need to find how
to convert &lt; and &gt; to a number so that the test selects cells with a
number and a lt or gt sign.

On 24-05-12 4:24 PM, Bob Stayton wrote: 

<xsl:if test="(ancestor-or-self::d:table/@tabstyle = 'numbers' or 
      ancestor-or-self::d:table/@tabstyle = 'numberstripe') and
not(ancestor::d:thead or
      ancestor::d:tfoot) and preceding-sibling::d:entry and
string(number(.))">

 

-- 
Dave Gardiner
Xmplar
i...@xmplar.biz
http://xmplar.biz
Mob. 0416 833 993

Reply via email to