Hi,
You need to just apply-templates in document order, so in english you
might say
for each <inst-part>
output <part-number>
output <description>
output <inst-notes>
at the moment you are saying
for each <inst-note>
output <part-number>
output <description>
output content...
so naturally enough you will get the <part-number> and <description>
output every time you encounter an <inst-note>.
Rearrange your templates a little and then apply them in document order
(if your dtd allows)
(untested)
<xsl:template match="inst-part">
<!-- format the part number and description -->
<!-- It is not that easy with FO -->
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="part-number">
<fo:table-row line-height="10pt">
<fo:table-cell padding="4pt">
<fo:block text-align="start">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
<fo:table-cell padding="4pt" height="1cm">
</xsl:template>
<xsl:template match="description">
<fo:table-cell padding="4pt" height="1cm">
<fo:block text-align="start">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="inst-note">
<!-- format the output of the "view" value along -->
<!-- with the note contents. This will not start -->
<!-- at the beginning of the line. -->
<!--....part-number and description handling code separated out-->
<fo:table-cell padding="4pt" height="1cm">
<fo:block text-align="center">
<xsl:value-of select="view"/>
.....
cheers
andrew
-----Original Message-----
From: jeremyf(_at_)isscorp(_dot_)com [mailto:jeremyf(_at_)isscorp(_dot_)com]
Sent: 04 November 2002 18:05
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] XSL selection question
Hi All,
I have an XML file such that:
<report>
-snip-
<module-installation-requirements sectionID="4">
<inst-part>
<part-number>G4P5616EGPPAE500</part-number>
<description>DESCRIPTION FOR INSTALLATION
REQUIREMENTS</description>
<inst-notes>
<inst-note>
<view>ENG</view>
<note>
<note-title>FREE FORM NOTE</note-title>
<note-description>TEXT FOR FREE FORM
NOTE</note-description>
</note>
</inst-note>
<inst-note>
<view>ENG</view>
<note>
<note-title>FREE FORM NOTE 2</note-title>
<note-description>TEXT FOR FREE FORM NOTE
2</note-description>
</note>
</inst-note>
</inst-notes>
</inst-part>
</module-installation-requirements>
-snip-
</report>
I want the following output
G4P5616EGPPAE500 DESCRIPTION FORINSTALLATIONREQUIREMENTS ENG
FREE FORM NOTE TEXT FOR FREE FORM NOTE
ENG
FREE FORM NOTE 2 TEXT FOR FREE FORM NOTE 2
Each of these is a row in my output. How do I select the number and
description the first time but not every time after until I
reach a new
number?
I have a template that gives me the nodes, but I also need to handle
different views for the same part/description and potentially multiple
<note> items per view.
My templates look something like this:
-snip-
<xsl:template match="module-installation-requirements">
<!-- start of format specific setup -->
<fo:table height="1cm" table-layout="fixed">
<fo:table-column column-width="25cm"/>
<fo:table-body font-family="Times-Roman"
font-weight="bold" font-size="8pt">
<fo:table-row line-height="8pt">
<fo:table-cell padding="8pt">
<fo:block text-align="start"
height=".5cm">* * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * *
* * * * * * * * </fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row line-height="8pt">
<fo:table-cell padding="8pt">
<fo:block
text-align="center"
height=".5cm" font-weight="normal">. . . MODULE INSTALLATION
REQUIREMENTS . . .</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:table height="1cm" table-layout="fixed">
<fo:table-column column-width="6cm"/>
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="8cm"/>
<fo:table-header font-family="Times-Roman"
font-weight="bold" font-size="8pt">
<fo:table-row line-height="10pt">
<fo:table-cell padding="4pt">
<fo:block
text-align="start">PART
OR IDENTIFYING NUMBER</fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="start">DESCRIPTION</fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="center">VIEW</fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="center">NOTE TITLE</fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block
text-align="start">NOTE
DESCRIPTION</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body font-family="Times-Roman"
font-weight="bold" font-size="8pt">
<!-- end setup -->
<!-- call the template to format this section and pass
the title -->
<xsl:choose>
<xsl:when test="*">
<xsl:apply-templates/>
</xsl:when>
<xsl:otherwise>
<fo:table height=".8cm" table-layout="fixed">
<fo:table-column column-width="25cm"/>
<fo:table-body font-family="Times-Roman" font-weight
="bold" font-size="8pt">
<fo:table-row line-height="10pt">
<fo:table-cell padding-top="8pt">
<fo:block
text-align="center" height
=".8cm">NO APPLICABLE DATA EXISTS</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:otherwise>
</xsl:choose>
<!-- start of clean up -->
</fo:table-body>
</fo:table>
<!-- end clean up -->
</xsl:template>
<xsl:template match="inst-part">
<!-- format the part number and description -->
<!-- It is not that easy with FO -->
<xsl:apply-templates select="inst-notes"/>
</xsl:template>
<xsl:template match="inst-note">
<!-- format the output of the "view" value along -->
<!-- with the note contents. This will not start -->
<!-- at the beginning of the line. -->
<fo:table-row line-height="10pt">
<fo:table-cell padding="4pt">
<fo:block text-align
="start"><xsl:value-of select="../../part-number"/></fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="start"><xsl:value-of select="../../description"/></fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="center"><xsl:value-of select="view"/></fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="center"><xsl:value-of select="note/note-title"/></fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="start"><xsl:value-of select="note/note-description"/></fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="inst-note/note">
<fo:table-row line-height="10pt">
<fo:table-cell padding="4pt">
<fo:block
text-align="start"/>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block
text-align="start"/>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="center"><xsl:value-of select="view"/></fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="center"><xsl:value-of select="note-title"/></fo:block>
</fo:table-cell>
<fo:table-cell
padding="4pt" height
="1cm">
<fo:block text-align
="start"><xsl:value-of select="note-description"/></fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</xsl:template>
I am certain that I am making this harder than it sould be,
but I am still
having trouble.
Any help is appreciated.
Jeremy
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list