[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: Sum in conjunction with string splitting?
Subject: Re: Sum in conjunction with string splitting?
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Fri, 8 Sep 2006 14:41:46 -0700
|
Does this help?
No, separate pieces of code do not help but confuse
On 9/8/06, Steve <subsume@xxxxxxxxx> wrote:
Above that code I expressed...
<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:func-transform="f:func-transform"
exclude-result-prefixes="xsl func-transform">
<xsl:import href="../../../Includes/fxsl-MS-1.1/transform-and-sum.xsl" />
<func-transform:func-transform/>
--
$Expenses actually looks like this:
<Expenses>
<expense>mileage 10</expense>
<expense>basketball</expense>
<expense>icing</expense>
<expense>mileage 40</expense>
</Expense>
I need a result of "50".
Does this help?
-Steve
On 9/8/06, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> I don't see your complete stylesheet so it can only be noticed that
> the expression:
>
> $expenses[substring(expense,1,7)='mileage']/expense
>
> is very unlikely to be what you really want to express as the node-set
> to be passed as argument.
>
> This will select all "expense" children if the first "expense" child
> happens to start with "mileage".
>
>
> The problem could be that the $expenses variable doesn't contain what
> you think it should.
>
> Also, I am not sure you have specified a template reference node -- at
> least it is not in the code, shown in your message.
>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
>
>
>
> On 9/8/06, Steve <subsume@xxxxxxxxx> wrote:
> > Dimitre,
> >
> > Incredibly helpful .txt file on the issue, but I seem to be
> > misapplying it. Do you see any obvious errors?
> >
> > I don't get the underlying logic, so it could be that my use of
> > $expense instead of a source doc is my problem. Less likely is the
> > fact that I'm using fxsl-MS.
> >
> > <xsl:call-template name="transform-and-sum">
> > <xsl:with-param name="pFuncTransform"
> > select="document('')/*/func-transform:*[1]"/>
> > <xsl:with-param name="pList"
> > select="$expenses[substring(expense,1,7)='mileage']/expense"/>
> > </xsl:call-template>
> >
> > <xsl:template match="func-transform:*">
> > <xsl:param name="arg" select="0"/>
> > <xsl:value-of select="$arg" /> <!-- This isn't printing anything -->
> > <xsl:value-of select="substring-after($arg, 'mileage')"/>
> > </xsl:template>
> >
> > $expense does indeed contain something like:
> >
> > <Expenses>
> > <expense>mileage 50</expense>
> > <expense>mileage 20</expense>
> > <expense>mileage 30</expense>
> > </Expense>
> >
> > On 9/8/06, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> > > On 9/8/06, Steve <subsume@xxxxxxxxx> wrote:
> > > > Posted yesterday, but I isolated the problem significantly =)
> > > >
> > > > The snippet below attempts to split the string 'mileage 6' into
> > > > [mileage] and [6] and then store it in $miles (for example).
> > > >
> > > > I am trying to get the SUM of the resulting SPLIT of the nodes that
> > > > match 'mileage'.
> > > >
> > > > I am close. Right now I only get one node, not the sum of all matches.
> > > >
> > > > <xsl:variable name="miles">
> > > > <xsl:call-template name="str-split-to-words">
> > > > <xsl:with-param name="pStr"
> > > > select="msxsl:node-set($expenses[substring(expense,1,7)='mileage']/expense)"
> > > > />
> > > > <xsl:with-param name="pDelimiters" select="' '" />
> > > > <!-- splitting expense at blank spaces -->
> > > > </xsl:call-template>
> > > > </xsl:variable>
> > > > <xsl:value-of select="msxsl:node-set($miles)/*[2]" /><br />
> > > >
> > > > ====
> > > >
> > > > $expenses example:
> > > >
> > > > <Expenses>
> > > > <expense>Mileage 6</expense>
> > > > <expense>cheese</expense> (wouldn't match)
> > > > <expense>Mileage 10</expense>
> > > > </Expenses>
> > > >
> > > > ====
> > > >
> > > > Desired value of $miles: 16.
> > >
> > > With FXSL2.0 one would simply write:
> > >
> > > sum(f:map(f:compose(f:decimal(),
> > > f:flip(f:substring-after(),' ')
> > > ),
> > > /*/*[contains(.,' ')]
> > > )
> > > )
> > >
> > >
> > > Or simply use the f:transform-and-sum() function:
> > >
> > > f:transform-and-sum(f:flip(f:substring-after(),' '),
> > > /*/*[contains(.,' ')]
> > > )
> > >
> > >
> > > In XSLT 1.0, one can use the "transform-and-sum" template of FXSL 1.x
> > >
> > >
> > > --
> > > Cheers,
> > > Dimitre Novatchev
> > > ---------------------------------------
> > > Truly great madness cannot be achieved without significant intelligence.
> > > ---------------------------------------
> > > To invent, you need a good imagination and a pile of junk
> > >
> > >
> > >
> > > >
> > > > Thanks a bunch,
> > > >
> > > > -Steve
--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|