Subject: Re: [xsl] Keeping comments with relevant node when shorting nodes From: Mike Blake-Knox <mikebk824@xxxxxxxxx> Date: Fri, 21 Jan 2005 09:18:04 -0500 |
All, I was impressed to receive three different ways of solving my problem. I started with Wendell's then added a sort (in-place). I then realised that I didn't need to actually put the comments inside the output N elements and used copy-of in the Ns/N template to generate them before the N elements. Thanks very much. Here's the resulting xslt code in case it helps anyone else: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml"/> <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:key name="comments-by-owner" match="comment() | text()" use="generate-id(following-sibling::*[1])"/> <xsl:template match="Ns/child::text()|N/child::text()"> </xsl:template> <xsl:template match="Ns"> <xsl:copy> <xsl:apply-templates select="N"> <xsl:sort select="@name"/> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match="Ns/N"> <xsl:copy-of select="key('comments-by-owner',generate-id())"/> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> Mike On Fri, 14 Jan 2005 18:13:16 -0500, Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote: > Hi Mike, > > Keys are useful for this kind of grouping in XSLT 1.0. > > I've never retrieved comments with a key, but that doesn't make it impossible: > > <xsl:key name="comments-by-owner" match="comment()" > use="generate-id(following-sibling::*[1])"/> > > This key will retrieve all the comments that precede a given element > (sibling), except those that also precede an earlier element. > > Then when you have > > <!-- comment 1 --> > <!-- comment 2 --> > <!-- comment 3 --> > <node/> > <!-- comment 4 --> > <!-- comment 5 --> > <node/> > > <xsl:template match="node"> > <xsl:copy> > <xsl:copy-of select="key('comments-by-owner',generate-id())"/ > </xsl:copy> > </xsl:template> > > would move the comments that "belong" to each node, inside it: > > <node> > <!-- comment 1 --> > <!-- comment 2 --> > <!-- comment 3 --> > </node> > <node> > <!-- comment 4 --> > <!-- comment 5 --> > </node> > > This uses the key-based idiom for positional grouping you'll find > documented at www.jenitennison.com (which we use typically to create > hierarchies out of flat structures -- as I've done in the example above). > > XSLT 2.0 has nice grouping constructs you can use for this: look Ma, no keys. > > Cheers, > Wendell > > At 03:32 PM 1/14/2005, you wrote: > >That sorts nicely but unfortunately, we have several comments in front > >of some node. > > > >I haven't been able to come up with a method of grouping the comments > >with their associated nodes. Would you have any suggestions? > > > >The current xsl is: > > > ><?xml version="1.0" encoding="UTF-8"?> > ><xsl:stylesheet version="1.0" > >xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > ><xsl:output indent="yes" method="xml"/> > > > ><xsl:template match="node() | @*"> > ><xsl:copy> > ><xsl:apply-templates select="@* | node()"/> > ></xsl:copy> > > </xsl:template> > > > > <xsl:template match="Ns"> > > <xsl:copy> > > <xsl:apply-templates select="N"> > > <xsl:sort select="@name"/> > > </xsl:apply-templates> > > </xsl:copy> > ></xsl:template> > > > ><xsl:template match="N"> > ><xsl:copy-of > >select="preceding-sibling::node()[normalize-space()][1][self::comment()] > >"/> > ><xsl:copy-of select="."/> > ></xsl:template> > > > ></xsl:stylesheet> > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/ > or e-mail: <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx> > --~-- > > -- Mike Blake-Knox
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Keeping comments with rel, Wendell Piez | Thread | RE: [xsl] Keeping comments with rel, Michael Kay |
[xsl] free XMLSpy version and xalan, Katharina Kreis | Date | AW: [xsl] free XMLSpy version and x, Huditsch Roman |
Month |