[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Node Order and Value determination

Subject: Re: Node Order and Value determination
From: scott gabelhart <swgabel@xxxxxxxxxxxx>
Date: Wed, 04 Feb 2004 14:11:08 -0500
number rows spanned
Jarno.Elovirta@xxxxxxxxx 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[@border='1'] or
ancestor::thead[@border='1'] or
ancestor::table[@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() = '&#160;'">
<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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.