[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: TOC Problem (XSL2 solution)

Subject: Re: TOC Problem (XSL2 solution)
From: JBryant@xxxxxxxxx
Date: Wed, 2 Mar 2005 16:42:10 -0600
page number citation ref id
Hi, Frank,

I generate my tables of contents by using a separate mode for it. (I also 
use another mode for creating the bookmarks.)

Since you want to list multiple page numbers on one line, you need to 
group the speech elements by speaker. That's easy with XSL2 (use 
for-each-group) and not so easy with XSL1 (use a recursive template)

Thus, for your document, my stylesheet would look like this:

  <xsl:template match="/">
    <xsl:apply-templates mode="contents"/>
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="protocoll">
    <xsl:apply-templates/>
  </xsl:template>
 
  <xsl:template match="protocoll" mode="contents">
    <xsl:for-each-group select="speech" group-by="speaker/@name">
      <fo:block>
        <xsl:value-of select="speaker/@name"/>
        <fo:leader leader-pattern="dots" leader-length.maximum="100%"/>
        <xsl:variable name="nameToCompare" select="speaker/@name"/>
        <xsl:for-each 
select="/protocoll/speech/speaker[@name=$nameToCompare]">
          <!-- need some logic to deal with commas -->
          <fo:page-number-citation ref-id="{generate-id(.)}"/>
        </xsl:for-each>
      </fo:block>
    </xsl:for-each-group>
  </xsl:template>
 
  <xsl:template match="speech">
    <!-- Build the body of the document -->
  </xsl:template>

I tested this with Saxon 8 on the following XML file:

<protocoll>
  <speech>
    <speaker name="Joe" id="Joe1">This is a long content of a 
speech.</speaker>
  </speech>
  <speech>
    <speaker name="Bob" id="Bob1">This is a long content of a 
speech.</speaker>
  </speech>
  <speech>
    <speaker name="Joe" id="Joe2">This is a long content of a 
speech.</speaker>
  </speech>
  <speech>
    <speaker name="Bob" id="Bob2">This is a long content of a 
speech.</speaker>
  </speech>
  <speech>
    <speaker name="Joe" id="Joe3">This is a long content of a 
speech.</speaker>
  </speech>
</protocoll>

It produced this:

<?xml version="1.0" encoding="UTF-8"?>
<fo:block>Joe<fo:leader leader-pattern="dots" 
leader-length.maximum="100%"/>
   <fo:page-number-citation ref-id="d1e5"/>
   <fo:page-number-citation ref-id="d1e17"/>
   <fo:page-number-citation ref-id="d1e29"/>
</fo:block>
<fo:block>Bob<fo:leader leader-pattern="dots" 
leader-length.maximum="100%"/>
   <fo:page-number-citation ref-id="d1e11"/>
   <fo:page-number-citation ref-id="d1e23"/>
</fo:block>

If you need the XSL1 solution, I refer you to Jeni Tennison's site, which 
Wendell's message mentioned.

HTH

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)





Frank Lorenz <f.lo@xxxxxx> 
03/02/2005 02:38 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
 TOC Problem






Hi,

i need a hint creating a table of content from underlying XML data.
The XML is transformed via XSLT to FO. The generated pdf then shows the
TOC - actually it does not :-(

The TOC should display the speaker on the left and all the starting 
pagenumbers of the
speech's beginning on the right.

The problem is that one speaker could speak at several times, which means
that there are several speechs per speaker distributet on several
pages.

It does not seem that XSLT respectively FO can handle this problem...

Regards
Frank

------------------------------------

Table Of Content
Joe..........1,5,6
Bob............3,7

------------------------------------

Underlying XML data:
<protocoll>

  <speech>
    <speaker name="Joe" id="Joe1">
     This is a long content of a speech...
  </speech>

  <speech>
    <speaker name="Bob" id="Bob1">
    This is a long content of a speech...
  </speech>

  <speech>
    <speaker name="Joe" id="Joe2">
    This is a long content of a speech...
  </speech>

   ...

</protocoll>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.