Subject: Re: [xsl] Keeping comments with relevant node when shorting nodes From: Mike Blake-Knox <mikebk824@xxxxxxxxx> Date: Fri, 14 Jan 2005 15:32:56 -0500 |
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> On Thu, 13 Jan 2005 23:21:51 -0000, Michael Kay <mike@xxxxxxxxxxxx> wrote: > Try: > > <xsl:apply-templates select="N"> > <xsl:sort select="@name"/> > </xsl:apply-templates> > > <xsl:template match="N"> > <xsl:copy-of select="preceding-sibling::comment()[1] > <xsl:copy-of select="."/> > </xsl:template> > > This assumes that every N element has an associated comment. > > Michael Kay > http://www.saxonica.com/ > > > -----Original Message----- > > From: Mike Blake-Knox [mailto:mikebk824@xxxxxxxxx] > > Sent: 13 January 2005 22:32 > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: [xsl] Keeping comments with relevant node when shorting nodes > > > > I have several XML files like the following: > > > > <!-- CNs--> > > <Ns> > > <!--CN1--> > > <N name="N1"> > > <Ms> > > <!--C1N3--> > > <M name="1N3"/> > > <!--C1N1--> > > <M name="1N1"/> > > <!--C1N2--> > > <M name="1N2"/> > > </Ms> > > </N> > > <!--CN2--> > > <N name="N2"> > > <Ms> > > <!--C2N2--> > > <M name="2N2"/> > > <!--C2N3--> > > <M name="2N3"/> > > <!--C2N1--> > > <M name="2N1"/> > > </Ms> > > </N> > > </Ns> > > > > > > I'd like to sort them while keeping comments with the nodes they refer > > to (e.g., keep <!--CN2--> with <M name="2N2"/>). > > > > I've tried the following xslt: > > > > <?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="comment()| N" > > > <xsl:sort select="@name"/> > > </xsl:apply-templates> > > </xsl:copy> > > </xsl:template> > > </xsl:stylesheet> > > > > It sorts fine but puts the comments for all the N nodes together at > > the top of the Ns element. I've played around with trying to group the > > comments and N nodes using preceding-sibling but have not been > > succesful. > > > > Any ideas? > > > > Thanks > > > > -- > > Mike Blake-Knox > > -- Mike Blake-Knox
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Keeping comments with rel, Michael Kay | Thread | Re: [xsl] Keeping comments with rel, David Carlisle |
Re: [xsl] Comparing node for identi, António Mota | Date | Re: [xsl] Extracting highest values, David Carlisle |
Month |