This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Combining grouping and generate-id() for multilevel TOC
- To: xsl-list at lists dot mulberrytech dot com
- Subject: [xsl] Combining grouping and generate-id() for multilevel TOC
- From: Ghostrider <ghostrider at advalvas dot be>
- Date: Wed, 18 Jul 2001 10:01:46 +0200
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi,
I've been trying to generate a two-level TOC in my HTML output, entries
linking to anchors created with a generate-id(). It works for the first, top
level but I can't get the second level from the hierarchy in there properly...
Could someone maybe have a look if my problem is the same as the one Jeni
solved in this message:
http://www.biglist.com/lists/xsl-list/archives/200101/msg00149.html ?
I can't seem to transform her templates and stuff to fit my situation (which,
unfortunately, is the way I have to go about using XSL...).
Am I correct if I assume that I need to
1. add a second grouping in the xsl for that second level, like I did for the
first one, and
2. use another generate-id() to refer to all these second level groups with a
unique anchor?
If so, how do I go about this? I'm having trouble putting the pieces together
logically, so any help would be appreciated.
Thanks,
Armin
<--=========== desired HTML output file: first grouping by <Category 1>
elements, then by <Category2>, both in the TOC section and in the Release
Notes section with the actual content in it ================-->
TOC
***
Input
--- <a href="#0123456"> DPF </a>
--- IPC
Ouput
--- DPF
--- IPC
RELEASE NOTES
*************
Input
--- <a name="0123456'>DPF - Description 1<a>
--- IPC - Description 2
Ouput
--- DPF - Description 3
--- IPC - Description 4
<--=============== XML source ==========================-->
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"
href="C:\HIGroup\XML\bugs\transform_09-07-01c.xsl"?>
<root>
<Bugs>
<Bug>
<Category1>Input</Category1> <-- grouping for Category1 is OK in XSL -->
<Category2>DPF</Category2> <-- additional (sub)grouping for Category2 is
not OK yet -->
<Type>Bug fix</Type>
<Description>Reading in ODB++ somehow ...</Description>
<BugBase>001</BugBase>
</Bug>
<Bug>
<Category1>Input</Category1>
<Category2>IPC</Category2>
<Type>Enhancement</Type>
<Description>Reading in ODB++ somehow ...</Description>
<BugBase>002</BugBase>
</Bug>
<Bug>
<Category1>Output</Category1>
<Category2>IPC</Category2>
<Type>Enhancement</Type>
<Description>Reading in ODB++ somehow ...</Description>
<BugBase>003</BugBase>
</Bug>
</Bugs>
<Calls>
<Call BugBase="001"> B10015 </Call>
<Call BugBase="001"> B10016 </Call>
<Call BugBase="002"> B10017 </Call>
<Call BugBase="003"> B10018 </Call>
<Call BugBase="003"> B10019 </Call>
</Calls>
</root>
<--=============== XSL stylesheet ======================-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="categories" match="Bug" use="Category1"/>
<xsl:key name="categories2" match="Bug" use="concat (Category1, '
',Category2)" />
<xsl:key name="calls" match="Call" use="@BugBase"/>
<xsl:template match="root">
<html>
<body>
<p>Release Notes</p>
<!-- TOC start-->
<p><b>Table of Contents</b></p>
<p>
<xsl:for-each select="//Bug[generate-id(.) = generate-id(key ('categories',
Category1) [1] ) ]">
<a href="#{generate-id(.)}"><xsl:value-of select="Category1" /> </a>
<br />
</xsl:for-each>
</p>
<!-- TOC end-->
<!-- Bug fix start-->
<xsl:apply-templates />
<!-- Bug fix end-->
</body>
</html>
</xsl:template>
<xsl:template match="root/Bugs">
<xsl:apply-templates select="Bug[generate-id(.) = generate-id(key
('categories', Category1) [1] ) ]" />
</xsl:template>
<xsl:template match="Bugs/Bug">
<div>
<b><a name="{generate-id(.)}"><xsl:value-of select="Category1" /></a></b>
<div>
<xsl:for-each select="key('categories', Category1)">
<span style="color:maroon;font-size:10pt;">
<p style="font-family:verdana,arial, helvetica, sans-serif;font-weight:bold">
<a name="Type"></a></p>
<p>
<b><xsl:value-of select="Category2"/></b></p>
</span>
<div>
<p<xsl:for-each select="key('calls', BugBase)">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">, </xsl:if>
</xsl:for-each></p>
<div><p>
<xsl:value-of select="Description"/>
</p>
</div>
</div>
</xsl:for-each>
</div>
</div>
</xsl:template>
<!--Start: no output for Call node-->
<xsl:template match="root/Calls/Call">
</xsl:template>
<!--End: no output for Call node-->
</xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list