Subject: RE: [xsl] grouping, xslt 2.0 From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 3 Apr 2007 09:25:00 +0100 |
In an XSLT pattern, current() refers to the node you are trying to match. So the pattern group-starting-with="*[name() = translate(name(current()),'1234','2345')]"> is wrong. Try assigning the result of the translate() to a variable first. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: john jacks [mailto:john.jacks@xxxxxxxxxxx] > Sent: 03 April 2007 08:49 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] grouping, xslt 2.0 > > I'm trying to get an example working from MKay book, using > starting-with. > The idea is to nest a flat structure properly, based on heading level. > > The p elements are not being processed as I'd want > (duplicated etc) and the nesting isn't correct. > > Any suggestions what's wrong please? > > JJ > > xml > > <grpStart> > <h1>Usual html example, flat, with properly stacked > levels</h1> <p>Each block must have one child</p> > > <h1>The instance must start with <b>h1</b></h1> <p>I.e. the > headings can follow with no more than one difference</p> > <p>1 2 3 3 4 5 4 3 etc</p> > > <h2>Invalid sequences</h2> > <h2>Which might be, in fact</h2> > <p>are 1 followed by 3</p> > <p>or 4 2</p> > > <h3>That's the way it goes</h3> > <p>Each block must have at least one child</p> <h3>The hard > part is persuading authors to follow style guidelines</h3> > <p>All blocks must have children</p> </grpStart> > > > xsl > > > xmlns:xs="http://www.w3.org/2001/XMLSchema-datatypes" > exclude-result-prefixes="xs" > version="2.0"> > > > > > <xsl:output method="xml" indent="yes" encoding="utf-8"/> > > <xsl:template match="/"> > <op> > <xsl:apply-templates select="//grpStart"/> > </op> > </xsl:template> > > > > > > <xsl:template match="grpStart"> > <xsl:for-each-group select="*" > group-starting-with="h1"> > <xsl:apply-templates select="."/> > </xsl:for-each-group> > </xsl:template> > > > > <xsl:template match="*[starts-with(name(),'h')]"> > <xsl:message> > Match on <xsl:value-of select="name()"/> > Population is <xsl:value-of select="count(current-group())"/> > </xsl:message> > <section level="{substring-after(name(),'h')}"> > <head><xsl:apply-templates/></head> > <xsl:for-each-group select="current-group() except ." > group-starting-with="*[name() = > translate(name(current()),'1234','2345')]"> > <xsl:apply-templates select="current-group()"/> > </xsl:for-each-group> > > </section> > </xsl:template> > > > > <xsl:template match="p"> > <para><xsl:apply-templates/></para> > </xsl:template> > > <xsl:template match="b"> > <emph><xsl:apply-templates/></emph> > </xsl:template> > > > > </xsl:stylesheet> > > actual output > > <op> > <section level="1"> > <head>Usual html example, flat, with properly stacked > levels</head> > <para>Each block must have one child</para> > </section> > <section level="1"> > <head>The instance must start with <emph>h1</emph> > </head> > <para>I.e. the headings can follow with no more than > one difference</para> > <para>1 2 3 3 4 5 4 3 etc</para> > <section level="2"> > <head>Invalid sequences</head> > <para>1 2 3 3 4 5 4 3 etc</para> > <section level="2"> > <head>Which might be, in fact</head> > <para>1 2 3 3 4 5 4 3 etc</para> > </section> > </section> > <section level="2"> > <head>Which might be, in fact</head> > <para>1 2 3 3 4 5 4 3 etc</para> > <section level="2"> > <head>Invalid sequences</head> > <para>1 2 3 3 4 5 4 3 etc</para> > </section> > </section> > <para>are 1 followed by 3</para> > <para>or 4 2</para> > <section level="3"> > <head>That's the way it goes</head> > <para>or 4 2</para> > </section> > <para>Each block must have at least one child</para> > <section level="3"> > <head>The hard part is persuading authors to follow > style guidelines</head> > <para>Each block must have at least one child</para> > </section> > <para>All blocks must have children</para> > </section> > </op> > > > > > > > > ___________________________________________________________ > New Yahoo! Mail is the ultimate force in competitive > emailing. Find out more at the Yahoo! Mail Championships. > Plus: play games and win prizes. > http://uk.rd.yahoo.com/evt=44106/*http://mail.yahoo.net/uk
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] grouping, xslt 2.0, john jacks | Thread | Re: [xsl] grouping, xslt 2.0, Abel Braaksma |
[xsl] grouping, xslt 2.0, john jacks | Date | Re: [xsl] Dreamweaver XSL Tranforms, Abel Braaksma |
Month |