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(.="")]
Thank you in advance.
-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>