xsl-list
[Top] [All Lists]

RE: Keeping comments with relevant node when shorting nodes

2005-01-14 16:56:30
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>
--~--