Sounds like it might be a good idea to do an initial pass that wraps the N
element and its preceding comments in a wrapper element. That's a positional
grouping problem:
<xsl:for-each-group select="child::node()" group-ending-with="N">
<wrapper>
<xsl:copy-of select="current-group()"/>
</wrapper>
</xsl:for-each-group>
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Mike Blake-Knox [mailto:mikebk824(_at_)gmail(_dot_)com]
Sent: 14 January 2005 20:33
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Keeping comments with relevant node when
shorting nodes
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(_at_)saxonica(_dot_)com> 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(_at_)gmail(_dot_)com]
Sent: 13 January 2005 22:32
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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
--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--
Mike Blake-Knox
--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--