|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: xslt 2
Your variable $cnt is a temporary tree, that is, a sequence containing
exactly one document node. So applying avg() to it is not going to do
much good.
Also the type of your sequence is xs:integer* rather than xs:integer
(it's a sequence of integers).
The simple way to do this is:
<xsl:function name="dp:childCount">
<xsl:param name="nm"/>
<xsl:sequence
select="avg(for $n in $root//*[name() = $nm]
return count($n//*))"/>
</xsl:function>
If you don't want to use the XPath "for" expression (some people dislike
writing long XPath expressions) you can do more of the work at the XSLT
level:
<xsl:function name="dp:childCount">
<xsl:param name="nm"/>
<xsl:variable name="counts" as="xs:integer*">
<xsl:for-each select="$root//*[name() = $nm]">
<xsl:copy-of select="count(.//*)"/>
</xsl:for-each>
</xsl:variable>
<xsl:sequence select="avg($counts)"/>
</xsl:function>
The "as" attribute on xsl:variable ensures that the result is a sequence
rather than a tree, and using xsl:copy-of avoids converting the integers
into text nodes and then back to integers, which is what happens if you
use xsl:value-of.
Michael Kay
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> David.Pawson@xxxxxxxxxxx
> Sent: 10 June 2003 10:02
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: xslt 2
>
>
> <xsl:function name="dp:childCount">
> <xsl:param name="nm" />
> <xsl:variable name="cnt">
> <xsl:sequence as="xs:integer">
> <xsl:for-each select="$root//*[name() = $nm]">
> <xsl:value-of select="count(.//*)"/>
> </xsl:for-each>
> </xsl:sequence>
> </xsl:variable>
>
> <xsl:sequence select="avg($cnt)"/>
> </xsl:function>
>
>
> Failing miserably.
> $root set to root of source document.
> param is a string, name of an element in that document.
>
> Requirement is to return the average number of children over
> all such elements in that document.
>
> Idea is to build a sequence of ints, each being the count of
> the number of element children.
>
> Any help appreciated.
>
> regards DaveP
>
>
>
> Regards DaveP.
>
> **** snip here *****
>
> -
>
> NOTICE: The information contained in this email and any
> attachments is
> confidential and may be legally privileged. If you are not the
> intended recipient you are hereby notified that you must not use,
> disclose, distribute, copy, print or rely on this email's content. If
> you are not the intended recipient, please notify the sender
> immediately and then delete the email and any attachments from your
> system.
>
> RNIB has made strenuous efforts to ensure that emails and any
> attachments generated by its staff are free from viruses. However, it
> cannot accept any responsibility for any viruses which are
> transmitted. We therefore recommend you scan all attachments.
>
> Please note that the statements and views expressed in this email
> and any attachments are those of the author and do not necessarily
> represent those of RNIB.
>
> RNIB Registered Charity Number: 226227
>
> Website: http://www.rnib.org.uk
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
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
|

Cart








