[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] xslt 2
Subject: RE: [xsl] xslt 2 From: "Michael Kay" <mhk@xxxxxxxxx> Date: Tue, 10 Jun 2003 11:50:21 +0100 |
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: [xsl] 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xslt 2, David Carlisle | Thread | RE: [xsl] xslt 2, David . Pawson |
Re: [xsl] Namespaces, David Totten | Date | Re: [xsl] Namespaces, David Carlisle |
Month |