xsl-list
[Top] [All Lists]

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

2010-03-24 15:32:29
Sorry, you're right. I can make a simplified test case:

ODT (styles.xml):
<style:style style:name="Heading_1" text:outline-level="1"/>
<style:style style:name="Heading_2" text:outline-level="2"/>
<style:style style:name="Heading_3" text:outline-level="3"/>
<style:style style:name="Heading_4" text:outline-level="4"/>

XHTML:
<p class="Heading_1">1</p>
...
<p class="Heading_3">1.1.1</p>
...
<p class="Heading_1">2</p>
...
<p class="Heading_2">2.1</p>
...
<p class="Heading_3">2.1.1</p>
...
<p class="Heading_2">2.2</p>

Desired outline (also what OpenOffice.org produces):
1
  1.1.1
2
  2.1
    2.1.1
  2.2

But if you process it recursively level after level as I described, you get:
1
2
  2.1
    2.1.1
  2.2

Notice 1.1.1 is missing, because 1.1 is missing as well -- in other
words, there is a gap between levels 1 and 3.

Does that make it clearer? How would you process such outline that all
the levels are included, no matter there are gaps between them?

Martynas

On Wed, Mar 24, 2010 at 8:03 PM, Dimitre Novatchev 
<dnovatchev(_at_)gmail(_dot_)com> wrote:
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(_dot_)jusevicius(_at_)gmail(_dot_)com> 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(_at_)gmail(_dot_)com> wrote:
Where are the sample Xhtml and xml documents?

On Wed, Mar 24, 2010 at 11:51 AM, Martynas Jusevicius
<martynas(_dot_)jusevicius(_at_)gmail(_dot_)com> 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:*">
 <xsl:param name="level" select="1"/>
 <xsl:variable name="level-classes" select="key('style-by-level',
$level, $styles-doc)//@style:name
 <xsl:variable name="level-elements" select="key('element-by-class',
$level-classes)"/>
 <li>
   <xsl:value-of select="."/>
   <ol>
     <xsl:apply-templates="$level-elements">
       <xsl:with-param name="level" select="$level + 1"/>
     </xsl:apply-templates>
   </ol>
 </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

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





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

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



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





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

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



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