[xsl] Filtering on a tokenized list

Subject: [xsl] Filtering on a tokenized list
From: "Rick Quatro rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Feb 2017 12:48:55 -0000
Hi All,

I have an attribute value that I want to convert to a sequence of decimals:

@colwidth="0.439in 1.845in"

I am using tokenize to drop the measurement units before I convert each
member to decimal:


This works, except I get a empty string as the last item in the list. I saw
in Michael's book that I can filter out the empty member with a predicate:


I can't quite understand how the predicate [.] works. Is it like saying
"non-empty strings"? Would it be equivalent to 


Thank you in advance.


By the way, here is my complete function. Any suggestions for improvements
are appreciated. I am going from absolute widths:

0.439in 1.845in

to a sequence of percentages:

19, 81

    <!-- Function for converting absolute table column widths to
proportional (percentage) widths. -->
    <xsl:function name="rq:getProportionalWidths">
        <!-- widths parameter is @colwidth in the form of absolute
dimensions. -->
        <xsl:param name="widths"/>
        <!-- Drop the measurement units and convert the strings to decimals.
        <xsl:variable name="tokens"
        <xsl:variable name="decimals" select="for $i in $tokens return
        <!-- Divide each number by the total of all numbers and multiply by
100. -->
        <xsl:sequence select="for $i in $decimals return round($i div
sum($decimals) * 100)"/>

Current Thread