Subject: RE: Keeping comments with relevant node when shorting nodes
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 13 Jan 2005 23:21:51 -0000
|
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: 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
|