xsl-list
[Top] [All Lists]

Re: Node Order and Value determination

2004-02-03 08:41:35
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