# Filtering on a tokenized list

 Subject: Filtering on a tokenized list From: "Rick Quatro rick@xxxxxxxxxxxxxx" 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:

tokenize(\$widths,'[^\.\d]')

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:

tokenize(\$widths,'[^\.\d]')[.]

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

[not(.="")]

-Rick

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"
select="tokenize(\$widths,'[^\.\d]')[.]"/>
<xsl:variable name="decimals" select="for \$i in \$tokens return
xs:decimal(\$i)"/>
<!-- 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)"/>
</xsl:function>

```

### PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!