Subject: Multiple Grouping in List
Posted By: ROCXY Post Date: 1/7/2006 4:16:47 AM
I have an XML.
--------------
<artbody>
<sec>
<subsec>
               <list>1. First level nunmbered list</list>
               <list>2. First level nunmbered list</list>
                    <sublist>(a) Second level nunmbered list</sublist>
                    <sublist>(b) Second level nunmbered list</sublist>
               <list>3. First level nunmbered list</list>
                    <sublist>I) Second level nunmbered list</sublist>
                        <sub_sublist>A. Third level nunmbered list</sub_sublist>
                        <sub_sublist>B. Third level nunmbered list</sub_sublist>
                    <sublist>II) Second level nunmbered list</sublist>
                    <sublist>III) Seconcd level nunmbered list</sublist>
               <list>4. First level nunmbered list</list>
               <list>5. First level nunmbered list</list>
               <list>6. First level nunmbered list</list>
                    <sublist>I) Second level nunmbered list</sublist>
                    <sublist>II) Second level nunmbered list</sublist>
               <list>7. First level nunmbered list</list>
                    <sublist>I) Second level nunmbered list</sublist>
                        <sub_sublist>A. Third level nunmbered list</sub_sublist>
                        <sub_sublist>B. Third level nunmbered list</sub_sublist>
                    <sublist>I) Second level nunmbered list</sublist>
                    <sublist>II) Second level nunmbered list</sublist>
               <list>8. First level nunmbered list</list>

</subsec>
</sec>
</artbody>

Used XSL.
---------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:output  method="xml" indent="yes"/>

<xsl:template match="node() | @*">
  <xsl:copy>
    <xsl:apply-templates select="node() | @*" />           
  </xsl:copy>
</xsl:template>


<xsl:template match="list | sublist | sub_sublist | sub_sub_sublist">
  <xsl:if test="not(name(preceding-sibling::*[1]) = 'list')">
    <xsl:if test="not(name(preceding-sibling::*[1]) = 'sublist')">
    <xsl:if test="not(name(preceding-sibling::*[1]) = 'sub_sublist')">
    <xsl:if test="not(name(preceding-sibling::*[1]) = 'sub_sub_sublist')">
    <done>
    <xsl:copy-of select=".| following-sibling::list |  following-sibling::sublist  | following-sibling::sub_sublist | following-sibling::sub_sub_sublist"/>
    </done>
    </xsl:if>
    </xsl:if>
    </xsl:if>
    </xsl:if>
</xsl:template>
</xsl:stylesheet>

Observed out put
-----------------
....
 <subsec>
                  <done>
            <list>1. First level nunmbered list</list>
            <list>2. First level nunmbered list</list>
            <sublist>(a) Second level nunmbered list</sublist>
            <sublist>(b) Second level nunmbered list</sublist>
            <list>3. First level nunmbered list</list>
            <sublist>I) Second level nunmbered list</sublist>
            <sub_sublist>A. Third level nunmbered list</sub_sublist>
            <sub_sublist>B. Third level nunmbered list</sub_sublist>
            <sublist>II) Second level nunmbered list</sublist>
            <sublist>III) Seconcd level nunmbered list</sublist>
            <list>4. First level nunmbered list</list>
            <list>5. First level nunmbered list</list>
            <list>6. First level nunmbered list</list>
            <sublist>I) Second level nunmbered list</sublist>
            <sublist>II) Second level nunmbered list</sublist>
            <list>7. First level nunmbered list</list>
            <sublist>I) Second level nunmbered list</sublist>
            <sub_sublist>A. Third level nunmbered list</sub_sublist>
            <sub_sublist>B. Third level nunmbered list</sub_sublist>
            <sublist>I) Second level nunmbered list</sublist>
            <sublist>II) Second level nunmbered list</sublist>
            <list>8. First level nunmbered list</list>
         </done>

As you see the above XSL transforms all the lists grouping under <done>, but I would like to group each and every sublist under a element. I tried uising 'following-sibilings' and 'mode' method but it results repetations and I was expecting as follows.
    

.........     
 <subsec>
       <done>
            <list>1. First level nunmbered list</list>
            <list>2. First level nunmbered list</list>

            <root_sublist>
            <sublist>(a) Second level nunmbered list</sublist>
            <sublist>(b) Second level nunmbered list</sublist>
            </root_sublist>

            <list>3. First level nunmbered list</list>

            <root_sublist>
            <sublist>I) Second level nunmbered list</sublist>

            <root_sub_sublist>
            <sub_sublist>A. Third level nunmbered list</sub_sublist>
            <sub_sublist>B. Third level nunmbered list</sub_sublist>
            </root_sub_sublist>

            <sublist>II) Second level nunmbered list</sublist>
            <sublist>III) Seconcd level nunmbered list</sublist>
            </root_sublist>

            <list>4. First level nunmbered list</list>
            <list>5. First level nunmbered list</list>
            <list>6. First level nunmbered list</list>

            <root_sublist>
            <sublist>I) Second level nunmbered list</sublist>
            <sublist>II) Second level nunmbered list</sublist>
            </root_sublist>
            <list>7. First level nunmbered list</list>
            |
        |
        |
        |
        |
         </done>
.......



I would greatly appreciate any help provided.

Thanks & Regards,
- ROCXY



Go to topic 38366

Return to index page 733
Return to index page 732
Return to index page 731
Return to index page 730
Return to index page 729
Return to index page 728
Return to index page 727
Return to index page 726
Return to index page 725
Return to index page 724