RE: [xsl] Getting a specific element count from a generic match

Subject: RE: [xsl] Getting a specific element count from a generic match
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 10 Apr 2006 17:07:09 +0100
> When using the Saxon api the error message I'm getting back is "Failed
> to compile stylesheet. 1 error detected". Figuring this wasn't quite
> enough info to go on 

You're doing something wrong in your API calls if you're not seeing the
error messages...

I ran it through stylus with Saxon 8.1.1, I get
> "Required type of first argument of name() is node(); supplied value
> has type xdt:anyAtomicType" on line 11 below:
> 
> When I change line 5 to  <xsl:variable name="namelist"
> select="//*[not(name() = following::*/name())]"/> I still get an error
> through Stylus, but it runs fine through .net.

8.1.1 was quite a long time ago, before node/name() was permitted by the
specs.

Michael Kay
http://www.saxonica.com/

> 
> 1 <?xml version="1.0" encoding="utf-8"?>
> 2 <xsl:stylesheet version="2.0"
> 3 x mlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 4
> 5 <xsl:variable name="namelist" 
> select="distinct-values(//*/node-name())"/>
> 6
> 7  <xsl:variable name="root" select="/"/>
> 8
> 9 <xsl:template match="/">
> 10   <xsl:for-each select="$namelist">
> 11     <xsl:variable name="thisname" select="name()"/>
> 12     <name value="{$thisname}" 
> count="{count($root//*[name() = $thisname])}"/>
> 13   </xsl:for-each>
> 14 </xsl:template>
> 15
> 16 </xsl:stylesheet>
> 
> On 4/7/06, Jay Bryant <jay@xxxxxxxxxxxx> wrote:
> > Good one, Mike, and thanks for reminding me about distinct-values().
> >
> > Jay Bryant
> > Bryant Communication Services
> >
> > ----- Original Message -----
> > From: "Michael Kay" <mike@xxxxxxxxxxxx>
> > To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> > Sent: Friday, April 07, 2006 3:13 PM
> > Subject: RE: [xsl] Getting a specific element count from a 
> generic match
> >
> >
> > > >
> > > > <?xml version="1.0" encoding="UTF-8"?>
> > > > <xsl:stylesheet version="2.0"
> > > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> > > >
> > > >   <xsl:variable name="namelist" select="//*[not(name() =
> > > > following::*/name())]"/>
> > > >
> > >
> > > We're talking 2.0 here: you can get all the distinct names using
> > >
> > > select="distinct-values(//*/node-name())"
> > >
> > > That's O(n log n) rather than O(n^2), and it's also 
> namespace-aware.
> > >
> > > Michael Kay
> > > http://www.saxonica.com/

Current Thread