Jarno(_dot_)Elovirta(_at_)nokia(_dot_)com wrote:
Hi,
I am stumped trying to deterimne based upon my xml input file
structure
how to generate
the proper number of fo:table-column based upon OBJECT
element(s) nested
within its parent TABLE element.
My xml input file:
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" OCCURENCE="1">
<DPROW>
<OBJECT ALIGN="left"
STYLE="background-color:#FFFFFF;" HEIGHT="10"/>
</DPROW>
</TABLE>
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0"
WIDTH="842" OCCURENCE="2">
<DPROW>
<OBJECT ALIGN="left" WIDTH="3"/>
<OBJECT>
<TABLE WIDTH="100%" BORDER="0"
CELLSPACING="0" CELLPADDING="0" OCCURENCE="2">
<DPROW>
<OBJECT WIDTH="4" HEIGHT="6"/>
<OBJECT WIDTH="22" HEIGHT="6"/>
<OBJECT WIDTH="67" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="211" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="273" HEIGHT="6"/>
<OBJECT WIDTH="48" HEIGHT="6"/>
<OBJECT WIDTH="92" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="82" HEIGHT="6"/>
<OBJECT WIDTH="6" HEIGHT="6"/>
<OBJECT WIDTH="22" HEIGHT="6"/>
<OBJECT WIDTH="5" HEIGHT="6"/>
</DPROW>
[..snip...]
Within my TABLE template I need a XPATH statement that works with my
nested xml structure for determining fo:table-columns based upon the
number of OBJECT elements. Specifically in the following xml structure
<TABLE><DPROW><OBJECT></OBJECT></DPROW></TABLE> should generate one
fo:table-column;
<TABLE><DPROW><OBJECT></OBJECT><OBJECT></OBJECT></DPROW></TABL
E> should
generate two fo:table-column statements
<TABLE><DPROW><OBJECT></OBJECT><OBJECT></OBJECT><OBJECT></OBJE
CT></DPROW></TABLE>
should generate three fo:table-column statements
e.g.
<xsl:for-each select="TABLE/DPROW/OBJECT">
<fo:table-column/>
</>
or if you want all the OBJECTs, then select "descendant::OBJECT".
Cheers,
Jarno - NEGATIVE FORMAT: Transfer
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Jarno,
thanks for the timely reply. The problem is your suggestion doesn't
solve my problem.
I want my xml structure when being transformed to determine for each
<OBJECT> element the creation of a corresponding <fo:table-column>
transform code snippet
<xsl:template match="TABLE">
<fo:table table-layout="fixed" width="7.5in"
space-before.optimum="5pt">
<!--xsl:call-template name="for-loop"/-->
<!--xsl:call-template name="build-columns"/-->
<xsl:for-each select="TABLE/DPROW/OBJECT">
<fo:table-column column-width="{6.26 div
last()}in"/>
</xsl:for-each>
<fo:table-body>
<xsl:apply-templates select="*"/>
</fo:table-body>
</fo:table>
</xsl:template>
creates in my output hundreds of fo:table-column tags.
xml input file snippet
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="842" OCCURENCE="2">
<DPROW>
<OBJECT ALIGN="left" WIDTH="3"/>
<OBJECT>
<TABLE WIDTH="100%" BORDER="0"
CELLSPACING="0" CELLPADDING="0" OCCURENCE="2">
<DPROW>
<OBJECT WIDTH="4" HEIGHT="6"/>
<OBJECT WIDTH="22" HEIGHT="6"/>
<OBJECT WIDTH="67" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="211" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="273" HEIGHT="6"/>
<OBJECT WIDTH="48" HEIGHT="6"/>
<OBJECT WIDTH="92" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="2" HEIGHT="6"/>
<OBJECT WIDTH="82" HEIGHT="6"/>
<OBJECT WIDTH="6" HEIGHT="6"/>
<OBJECT WIDTH="22" HEIGHT="6"/>
<OBJECT WIDTH="5" HEIGHT="6"/>
</DPROW>
For the first TABLE/DPROW/OBJECT containing two object elements I would
need to create two corresponding fo:table-column tags and for the
second TABLE/DPROW/OBJECT containing fifteen object elements I would
need to create fifteen corresponding fo:table-column tags.
What am I doing wrong in the XPath declaration?
- Scott
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list