Thanks Bob for the tip about translate. I finally worked it out - coding as follows:

<xsl:templatename="table.cell.block.properties">
<xsl:variablename="stringanglesymbol">
<xsl:choose>
<xsl:whentest="contains(., '&lt;')">
<xsl:value-ofselect="(translate(., '&lt;', ''))"/>
</xsl:when>
<xsl:whentest="contains(., '&gt;')">
<xsl:value-ofselect="(translate(., '&gt;', ''))"/>
</xsl:when>
</xsl:choose>
</xsl:variable>

<!--margin and indent for portrait format tables-->
<xsl:choose>
<xsl:whentest="(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($stringanglesymbol)) != 'NaN') or (string(number(.)) != 'NaN'))">
<xsl:attributename="text-align">right</xsl:attribute><!--text alignment
for numbers in cells-->

<!--specify right margin as a percentage of cell width (default: 30)-->
<xsl:attributename="margin-right">
<xsl:choose>
<xsl:whentest="self::d:entry/d:footnote"><!--reduce the right margin if
there is a footnote in the cell-->
<xsl:value-ofselect="$cellfootnoteindent"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-ofselect="$cellnumberindent"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>%</xsl:text>
</xsl:attribute>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>



On 26-05-12 5:59 AM, Bob Stayton wrote:
One way to handle those characters is to use the translate() function to remove them before doing the test. If the third argument of translate() is empty, then the matching characters in the second argument disappear, and all other characters are left untouched. Something like:
string(number(translate(., '&lt;&gt;', '')))
Bob Stayton
Sagehill Enterprises
[email protected] <mailto:[email protected]>

    ----- Original Message -----
    *From:* Xmplar <mailto:[email protected]>
    *To:* Bob Stayton <mailto:[email protected]>
    *Cc:* DocBook Apps <mailto:[email protected]>
    *Sent:* Thursday, May 24, 2012 7:38 PM
    *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
    [email protected]
    http://xmplar.biz
    Mob. 0416 833 993


--
*Dave Gardiner*

Reply via email to