The included files are neither complete nor simplified.
Here is an example of simplified XML input:
<TABLE>
<DPROW>
<OBJECT></OBJECT>
</DPROW>
<TABLE>
<DPROW>
<OBJECT></OBJECT>
<OBJECT></OBJECT>
</DPROW>
</TABLE>
</TABLE>
Here is an example of simplified XSL
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="FO">
<xsl:template match="TABLE">
<fo:table>
<xsl:apply-templates/>
</fo:table>
</xsl:template>
<xsl:template match="DPROW">
<fo:table-row>
<xsl:apply-templates/>
</fo:table-row>
</xsl:template>
<xsl:template match="OBJECT">
<fo:table-column>
<xsl:apply-templates/>
</fo:table-column>
</xsl:template>
</xsl:stylesheet>
Here is an example of the output I get:
<?xml version="1.0" encoding="utf-8"?>
<fo:table xmlns:fo="FO">
<fo:table-row>
<fo:table-column/>
</fo:table-row>
<fo:table>
<fo:table-row>
<fo:table-column/>
<fo:table-column/>
</fo:table-row>
</fo:table>
</fo:table>
Using this example, what is the output that you want to get?
Josh
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of
scott
gabelhart
Sent: Wednesday, February 04, 2004 11:11 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Node Order and Value determination
Jarno(_dot_)Elovirta(_at_)nokia(_dot_)com wrote:
Hi,
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">
This should be
<xsl:for-each select="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 does it create then if not that (after the fix mentioned above)?
What am I doing wrong in the XPath declaration?
It's called "XPath expression". If your stylesheet still doesn't work, please
send a complete, simplified example source document with the stylesheet you have so far,
*and* example of the desired output.
Cheers,
Jarno - Melotron: Kein Problem (Problemzonen-Mix)
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Jarno,
thanks for the response. I tried your most current suggestion
previously myself and I am still getting the wrong result.
My xml input file is modeled very closely against html a html <table> is
a <TABLE>; a <tr> is a <DPROW>, and a <td> is a <OBJECT>.
My xml input file has nested html tables and that is where the problem
is coming in when trying to transform this particular input file.
I have attached my xslt, along with partial xml input file and output.
What I need to determine for my xsl:fo output is between the start of a
<TABLE> element in my input file and either the start of a new <TABLE>
or <DPROW> element how many <OBJECT> elements were contained. Example
<TABLE><DPROW><OBJECT></OBJECT></DPROW></TABLE> should yield one
fo:table-column.
<TABLE><DPROW><OBJECT></OBJECT></DPROW><TABLE><DPROW><OBJECT></OBJECT><OBJECT></OBJECT></DPROW></TABLE>
should yield two fo:table-column for the inner table and a single
fo:table-column for the outer table.
Essential in XPath how do I inspect from one <TABLE> element to either
the ending </DPROW> of corresponding closing </TABLE> element the number
of <OBJECT> elements.
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>
<DPROW>
<OBJECT WIDTH="4"/>
<OBJECT WIDTH="22"/>
<OBJECT WIDTH="67" VALIGN="top">
<TABLE BORDER="0" WIDTH="66"
OCCURENCE="2">
<DPROW>
<OBJECT
STYLE="color:#000000;font-family:Arial;font-size:10pt;background-color:#FFFFFF;height:20px;font-weight:bold;">Agent
ID:</OBJECT>
</DPROW>
</TABLE>
</OBJECT>
<OBJECT WIDTH="2" COLSPAN="2"
VALIGN="top">
<TABLE BORDER="0" WIDTH="212"
OCCURENCE="2">
<DPROW>
<OBJECT
STYLE="color:#000000;font-family:Arial;font-size:12pt;background-color:#FFFFFF;height:20px;font-weight:bold;">100008</OBJECT>
</DPROW>
</TABLE>
</OBJECT>
<OBJECT WIDTH="2"/>
<OBJECT WIDTH="273"/>
<OBJECT WIDTH="48"/>
<OBJECT WIDTH="92"/>
<OBJECT WIDTH="2"/>
<..snip..>
xsl file
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!--sect 1-->
<xsl:template match="/">
<xsl:apply-templates select="WITAGLIB"/>
</xsl:template>
<xsl:template match="WITAGLIB">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<!--sect 2-->
<fo:layout-master-set>
<fo:simple-page-master master-name="all"
page-height="11in" page-width="8.5in" margin-left=".25in"
margin-right=".25in">
<fo:region-body region-name="all-body"
margin-bottom=".55in" margin-top=".79in"/>
<fo:region-before region-name="all-before"
extent="1in" display-align="after" padding="6pt 1in"/>
<fo:region-after region-name="all-after"
extent="1in" display-align="before" padding="6pt 1in"/>
</fo:simple-page-master>
<!--sect 3-->
</fo:layout-master-set>
<fo:page-sequence master-reference="all">
<xsl:apply-templates/>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="FORMATTED">
<!-- ============================================
Start generating the content for the main page
area (xsl-region-body).
=============================================== -->
<fo:flow flow-name="all-body">
<xsl:apply-templates/>
</fo:flow>
</xsl:template>
<!--sect 4-->
<xsl:template match="TABLE">
<fo:table table-layout="fixed" width="7.5in"
space-before.optimum="5pt">
<xsl:for-each select="DPROW/OBJECT">
<fo:table-column column-width="{6.26 div last()}in"/>
</xsl:for-each>
<fo:table-body>
<xsl:apply-templates/>
</fo:table-body>
</fo:table>
</xsl:template>
<!-- row section-->
<xsl:template match="DPROW">
<fo:table-row>
<xsl:apply-templates/>
</fo:table-row>
</xsl:template>
<!--sect 5-->
<xsl:template match="OBJECT">
<fo:table-cell padding-start="3pt" padding-end="3pt"
padding-before="3pt" padding-after="3pt" border-style="solid"
border-color="black" border-width="1pt">
<xsl:if test="@COLSPAN">
<xsl:attribute
name="number-columns-spanned"><xsl:value-of
select="@COLSPAN"/></xsl:attribute>
</xsl:if>
<xsl:if test="@ROWSPAN">
<xsl:attribute name="number-rows-spanned"><xsl:value-of
select="@ROWSPAN"/></xsl:attribute>
</xsl:if>
<xsl:if test="@border='1' or
ancestor::tr[(_at_)border='1'] or
ancestor::thead[(_at_)border='1'] or
ancestor::table[(_at_)border='1']">
<xsl:attribute
name="border-style"><xsl:text>solid</xsl:text></xsl:attribute>
<xsl:attribute
name="border-color"><xsl:text>black</xsl:text></xsl:attribute>
<xsl:attribute
name="border-width"><xsl:text>1pt</xsl:text></xsl:attribute>
</xsl:if>
<xsl:variable name="align">
<xsl:choose>
<xsl:when test="@ALIGN">
<xsl:choose>
<xsl:when test="@ALIGN='center'">
<xsl:text>center</xsl:text>
</xsl:when>
<xsl:when test="@ALIGN='left'">
<xsl:text>left</xsl:text>
</xsl:when>
<xsl:when test="@ALIGN='right'">
<xsl:text>end</xsl:text>
</xsl:when>
<xsl:when test="@ALIGN='justify'">
<xsl:text>justify</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>start</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose>
</xsl:variable>
<fo:block text-align="{$align}" wrap-option="no-wrap" >
<xsl:attribute
name="font-family"><xsl:text>Courier</xsl:text></xsl:attribute>
<xsl:attribute
name="font-weight"><xsl:text>bold</xsl:text></xsl:attribute>
<xsl:attribute
name="font-size"><xsl:text>10pt</xsl:text></xsl:attribute>
<xsl:choose>
<xsl:when test="text() = ' '">
<fo:block />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="*|text()"/>
</xsl:otherwise>
</xsl:choose>
</fo:block>
</fo:table-cell>
</xsl:template>
<!--sect 6-->
<!--sect 7-->
<xsl:template match="title">
<fo:block space-after="18pt" line-height="27pt" font-size="24pt"
font-weight="bold" text-align="center">
<xsl:apply-templates select="*|text()"/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
Current output:
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="all" page-height="11in"
page-width="8.5in" margin-left=".25in" margin-right=".25in">
<fo:region-body region-name="all-body" margin-bottom=".55in"
margin-top=".79in"/>
<fo:region-before region-name="all-before" extent="1in"
display-align="after" padding="6pt 1in"/>
<fo:region-after region-name="all-after" extent="1in"
display-align="before" padding="6pt 1in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="all">
<fo:flow flow-name="all-body">
<fo:block space-after="18pt" line-height="27pt"
font-size="24pt" font-weight="bold" text-align="center">Report1</fo:block>
<fo:table table-layout="fixed" width="7.5in"
space-before.optimum="5pt">
<fo:table-column column-width="50pt"/>
<fo:table-column column-width="6.26in"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-start="3pt"
padding-end="3pt" padding-before="3pt" padding-after="3pt"
border-style="solid" border-color="black" border-width="1pt">
<fo:block text-align="left"
wrap-option="no-wrap" font-family="Courier" font-weight="bold"
font-size="10pt"/>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:table table-layout="fixed" width="7.5in"
space-before.optimum="5pt">
<fo:table-column column-width="50pt"/>
<fo:table-column column-width="3.13in"/>
<fo:table-column column-width="3.13in"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-start="3pt"
padding-end="3pt" padding-before="3pt" padding-after="3pt"
border-style="solid" border-color="black" border-width="1pt">
<fo:block text-align="left"
wrap-option="no-wrap" font-family="Courier" font-weight="bold"
font-size="10pt"/>
</fo:table-cell>
<fo:table-cell padding-start="3pt"
padding-end="3pt" padding-before="3pt" padding-after="3pt"
border-style="solid" border-color="black" border-width="1pt">
<fo:block text-align="start"
wrap-option="no-wrap" font-family="Courier" font-weight="bold"
font-size="10pt">
<fo:table table-layout="fixed"
width="7.5in" space-before.optimum="5pt">
<fo:table-column column-width="50pt"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/>
<fo:table-column
column-width="0.0680434782608696in"/> <- This line repeats 300 + times
for all the object occurences in the complete xml file
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list