xsl-list
[Top] [All Lists]

Re: [xsl] Generating multi-level flexible recursive nested lists

2006-06-06 15:59:36


If you see HTML view of my expected output, you will
know what I meant.

but that your requested output is an html syntax error, if your browser
displays anything it's just because browswers almost never give errors
and try to handle any markup that looks a bit like html.

An ol may only have li elements as children and you are requesting that
it have nested ol elements.

        <ol>
                <li>
                  ALevel1
                </li>
                <li>
                  BLevel1
                </li>
                <ol>
                    <li>
                          aLevel2
                    </li>
                    <li>
                       bLevel2
                    </li>
                </ol>
                <li>
                  CLevel1
                </li>


should be
b
        <ol>
                <li>
                  ALevel1
                </li>
                <li>
                  BLevel1
                   <ol>
                        <li>
                          aLevel2
                        </li>
                        <li>
                          bLevel2
                         </li>
                   </ol>
                </li>
                <li>
                  CLevel1
                </li>

David


<xsl:template match="doc">
<html>
<body>
<xsl:apply-templates mode="ol"  select="p[1]"/>
</body>
</html>
</xsl:template>

<xsl:template mode="ol" match="p">
  <xsl:variable name="l" select="substring-after(@style,'level')"/>
  <ol>
   <li>
    <xsl:copy-of select="normalize-space(.)"/>
    <xsl:apply-templates mode="ol"
  select="following-sibling::p[1][substring-after(@style,'level') &gt;
  $l]"/>
   </li>
    <xsl:apply-templates mode="li"
  select="following-sibling::p[substring-after(@style,'level') &lt;=
  $l][1][substring-after(@style,'level') = $l]"/>
  </ol>
</xsl:template>


<xsl:template mode="li" match="p">
  <xsl:variable name="l" select="substring-after(@style,'level')"/>
  <li>
    <xsl:copy-of select="normalize-space(.)"/>
    <xsl:apply-templates mode="ol"
  select="following-sibling::p[1][substring-after(@style,'level') &gt;
  $l]"/>
  </li>
    <xsl:apply-templates mode="li"
  select="following-sibling::p[substring-after(@style,'level') &lt;=
  $l][1][substring-after(@style,'level') = $l]"/>
</xsl:template>

</xsl:stylesheet>


<doc>
<p style="level1">
ALevel1
</p>
<p style="level1">
BLevel1
</p>
<p style="level2">
aLevel2
</p>
<p style="level2">
bLevel2
</p>
<p style="level1">
CLevel1
</p>
<p style="level1">
DLevel1
</p>
<p style="level2">
aLevel2
</p>
<p style="level2">
bLevel2
</p>
<p style="level3">
iLevel3
</p>
<p style="level3">
iiLevel3
</p>
<p style="level2">
cLevel2
</p>
<p style="level1">
ELevel1
</p>
</doc>


$ saxon lev.xml lev.xsl
<html>
   <body>
      <ol>
         <li>ALevel1</li>
         <li>BLevel1
            <ol>
               <li>aLevel2</li>
               <li>bLevel2</li>
            </ol>
         </li>
         <li>CLevel1</li>
         <li>DLevel1
            <ol>
               <li>aLevel2</li>
               <li>bLevel2
                  <ol>
                     <li>iLevel3</li>
                     <li>iiLevel3</li>
                  </ol>
               </li>
               <li>cLevel2</li>
            </ol>
         </li>
         <li>ELevel1</li>
      </ol>
   </body>
</html>


________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>