Subject: Re: [xsl] Recursively traversing an outline with level gaps From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Wed, 24 Mar 2010 11:55:45 -0700 |
Where are the sample Xhtml and xml documents? On Wed, Mar 24, 2010 at 11:51 AM, Martynas Jusevicius <martynas.jusevicius@xxxxxxxxx> wrote: > Hey list, > > I want to create a nested list (ToC) from a XHTML source, which > contains @class attributes on elements. > A separate document, styles.xml, contains information about styles and > which outline level they belong to. @style:name matches @class in > XHTML. > > The tricky part is, that not all styles are necessarily used in XHTML. > And if they are, the outline hierarchy is not necessarily maintained > -- for example, only styles with level 1, 3 and 5 can be used. > > How would you traverse such a structure? My approach is to do it > recursively, by finding all styles for the current level, and all > elements of these styles (simplified): > > <xsl:template match="h:*"> > B <xsl:param name="level" select="1"/> > B <xsl:variable name="level-classes" select="key('style-by-level', > $level, $styles-doc)//@style:name > B <xsl:variable name="level-elements" select="key('element-by-class', > $level-classes)"/> > B <li> > B B <xsl:value-of select="."/> > B B <ol> > B B B <xsl:apply-templates="$level-elements"> > B B B B <xsl:with-param name="level" select="$level + 1"/> > B B B </xsl:apply-templates> > B B </ol> > B </li> > </xsl:template> > > But this gives problems since levels are not necessarily consecutive. > The first level can be 2, for example. > I also tried iterating only through actually used levels like (1, 3, > 5), but it's not a full solution either, because the level hierarchy > can differ in each branch. > > Help appreciated. > > Martynas > odt2epub.com > > -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- I enjoy the massacre of ads. This sentence will slaughter ads without a messy bloodbath.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Recursively traversing an out, Martynas Jusevicius | Thread | Re: [xsl] Recursively traversing an, Martynas Jusevicius |
[xsl] Recursively traversing an out, Martynas Jusevicius | Date | Re: [xsl] Recursively traversing an, Martynas Jusevicius |
Month |