Subject: RE: 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: 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 |
|
Jay Bryant - 8 Apr 2006 02:31:11 -0000
|
|