Re: [xsl] Recursively traversing an outline with level gaps

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