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 12:03:45 -0700
Nobody needs the copyrighted files. I was asking for sample files.
This is a *class of problems* and many sample files (not only the
copyrighted ones exist). Or are you attempting to copyright all xml
files that are appropriate samples for this problem? :)

Please, do understand that by not providing well-defined problem, you
are severely decreasing the chances of somebody willing to spend their
time guessworking.



On Wed, Mar 24, 2010 at 11:58 AM, Martynas Jusevicius
<martynas.jusevicius@xxxxxxxxx> wrote:
> These are copyrighted texts, so I'm unfortunately not able to provide
them..
>
> On Wed, Mar 24, 2010 at 7:55 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx>
wrote:
>> 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.
>
>



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