W3C home > Mailing lists > Public > www-xsl-fo@w3.org > February 2010

Re: Table Manipulation

From: Aish <aiswarya@laserwords.com>
Date: Thu, 4 Feb 2010 01:43:51 -0800 (PST)
Message-ID: <27450029.post@talk.nabble.com>
To: www-xsl-fo@w3.org
Hey Anandh,

I am not sure whether it can be achieved or not.. But your XML doesn't have
elements such as "row" and "head". Just try with "keep-with-next" property
of fo:table-row(am not sure it works).

Regards
Aish



anandhthiyagarajan wrote:
> 
> Okay i will make you clear.
> 
> Consider the xml
> 
> <node>
>     <title>
>         <ingredients>
>             <name>Category</name>
>             <name>Noodles</name>
>             <name>Pizza</name>
>         </ingredients>
>         <ingredients>
>             <ingredient>
>                 <content>Fat</content>
>                 <description>aaaa</description>
>             </ingredient>
>         </ingredients>
>         <ingredients>
>             <ingredient>
>                 <content>Fat</content>
>                 <description>hgjhgk</description>
>             </ingredient>
>         </ingredients>
>     </title>
> </node>
> 
> 
> Consider the xsl:fo
> 
> <xsl:template match="node/title">
>         <fo:block space-before="4mm" hyphenate="true">
>             <fo:table table-layout="fixed" width="7in"> 
>                 <xsl:for-each select="ingredients/name">
>                     <fo:table-column column-width="10pt" />
>                 </xsl:for-each>
>                 <fo:table-header hyphenate="true">
>                     <xsl:for-each select="head">
>                         <fo:table-row>
>                             <xsl:for-each select="ingredients/name">
>                                 <fo:table-cell border="thin black ridge"
> padding="4pt" font-size="10pt" letter-spacing="0.8pt" color="white"
> background-color="rgb(39,64,139)"
>                                     font-weight="bold"
> font-family="Verdana" text-align="center">
>                                     <fo:block>
>                                         <xsl:value-of select="."/>
>                                     </fo:block>
>                                 </fo:table-cell>
>                             </xsl:for-each>
>                         </fo:table-row>
>                     </xsl:for-each>
>                 </fo:table-header>
>                 <fo:table-body hyphenate="true">
>                     <xsl:for-each select="row">
>                         <fo:table-row>
>                             <xsl:for-each select="ingredients/ingredient">
>                                 <fo:table-cell border="thin black ridge"
> padding="4pt" font-size="10pt" color="black"
>                                 letter-spacing="1pt" font-family="Verdana"
> text-align="center">
>                                     <fo:block>
>                                         <xsl:value-of select="."/>
>                                     </fo:block>
>                                 </fo:table-cell>
>                             </xsl:for-each>
>                         </fo:table-row>
>                     </xsl:for-each>
>                 </fo:table-body>
>             </fo:table>
>         </fo:block>
>     </xsl:template>
> 
> 
> I am attaching the output file
> 
>  http://old.nabble.com/file/p27448047/Table.doc Table.doc 
> 
> 
> Hope this would be clear.
> 
> 
> Thanks
> 
> Anandh
> 
> 
> 
> 
> Aish wrote:
>> 
>> Hi Anandh,
>> 
>> I am unable to understand your question. 
>> 
>> 1. Did you mean wrapping text in fo:table?
>>       If the case is so, you can mention the width of each cell by the
>> property fo:table-column column-width(<fo:table-column
>> column-width="1in"/>) of the table. This is an inbuilt wrapping of text.
>> In case if you need to hyphenate words, you can use hyphenation property.
>> Check out the site
>> http://www.cafeconleche.org/books/bible3/chapters/ch16.html for
>> explanation regarding that property.
>> 
>> 2. Did you mean size of table?
>>       If the case is so, you can mention the width of the table using the
>> property "width". For eg:<fo:table  table-layout="fixed" width="100%" 
>> font-size="9pt">
>> 
>> Hope this helps. Let me know if you need any further clarifications
>> 
>> Regards
>> Aish
>> 
>> 
>> anandhthiyagarajan wrote:
>>> 
>>> Thanks a lot aish. It served exactly my purpose. Can you also suggest me
>>> is it possible to wrap the table in xsl:fo.
>>> 
>>> 
>>> 
>>> Thanks again
>>> 
>>> Anandh
>>> 
>>> Aish wrote:
>>>> 
>>>> Hi Anandh, 
>>>> 
>>>> I did it using FOP 0.95. In your xsl code, number of <fo:table-column
>>>> column-width="1in"/> doesn't match(less than) the columns given under
>>>> for-each of quarters and hence the problem. You need to check empty
>>>> quarters. Also, attribute "increment-by" is removed as it doesn't
>>>> support. The code will be as below. 
>>>> 
>>>> <xsl:template match="root/roadmap"> 
>>>>     <fo:block space-before='2mm'> 
>>>>       <fo:block font-size="10pt" color="black" font-weight="bold"
>>>> space-before="0.54in" space-after="2pt" > 
>>>>         ROADMAP INFORMATION 
>>>>       </fo:block> 
>>>>       <fo:block space-before='2mm'> 
>>>>       </fo:block> 
>>>>       <fo:table  border-collapse="collapse"  font-size="9pt"> 
>>>>         <fo:table-column column-width="1in"/> 
>>>>         <fo:table-column column-width="1in"/> 
>>>>         <fo:table-column column-width="1in"/> 
>>>>         <fo:table-column column-width="1in"/> 
>>>>         <fo:table-column column-width="1in"/> 
>>>>         <fo:table-header color="black"
>>>> background-color="rgb(39,64,139)" font-weight="bold"> 
>>>>           <fo:table-row> 
>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>> text-align="center"> 
>>>>               <fo:block>YEAR</fo:block> 
>>>>             </fo:table-cell> 
>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>> text-align="center"> 
>>>>               <fo:block>Q1</fo:block> 
>>>>             </fo:table-cell> 
>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>> text-align="center"> 
>>>>               <fo:block>Q2</fo:block> 
>>>>             </fo:table-cell> 
>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>> text-align="center"> 
>>>>               <fo:block>Q3</fo:block> 
>>>>             </fo:table-cell> 
>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>> text-align="center"> 
>>>>               <fo:block>Q4</fo:block> 
>>>>             </fo:table-cell> 
>>>>           </fo:table-row> 
>>>>         </fo:table-header> 
>>>>         <fo:table-body> 
>>>>           <xsl:for-each select="years"> 
>>>>             <fo:table-row> 
>>>>               <fo:table-cell padding="2pt" border="1pt solid black"
>>>> background-color="rgb(255,255,255)" text-align="center"> 
>>>>                 <fo:block><xsl:value-of select="year"/></fo:block> 
>>>>               </fo:table-cell> 
>>>>               <xsl:variable name="MyQuarter"><xsl:value-of
>>>> select="quarters[1]/quarter"/></xsl:variable> 
>>>>               <xsl:choose> 
>>>>                 <xsl:when test="$MyQuarter='Q1'"> 
>>>> 
>>>>                 </xsl:when> 
>>>>                 <xsl:when test="$MyQuarter='Q2'"> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black"><fo:block/></fo:table-cell> 
>>>>                 </xsl:when>	
>>>>                 <xsl:when test="$MyQuarter='Q3'"> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                 </xsl:when> 
>>>>                 <xsl:when test="$MyQuarter='Q4'"> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                 </xsl:when> 
>>>>                 <xsl:when test="$MyQuarter='Q5'"> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                         <fo:table-cell padding="2pt" border="1pt solid
>>>> black" text-align="center"><fo:block/></fo:table-cell> 
>>>>                 </xsl:when> 
>>>>               </xsl:choose> 
>>>>               <xsl:for-each select="quarters"> 
>>>>                 <fo:table-cell padding="2pt" border="1pt solid black"
>>>> background-color="rgb(255,255,255)" text-align="center"> 
>>>>                   <fo:block><xsl:apply-templates
>>>> select="requirements"/></fo:block> 
>>>>                 </fo:table-cell> 
>>>>               </xsl:for-each> 
>>>>             </fo:table-row> 
>>>>           </xsl:for-each> 
>>>>         </fo:table-body> 
>>>>       </fo:table> 
>>>>     </fo:block> 
>>>>   </xsl:template> 
>>>> 
>>>> <xsl:template match="requirements"> 
>>>>         <xsl:apply-templates/> 
>>>> </xsl:template> 
>>>> 
>>>> <xsl:template match="requirement"> 
>>>>         <xsl:apply-templates/> 
>>>> </xsl:template> 
>>>> 
>>>> This code will produce your desired output with FOP 0.95. Hope this
>>>> helps:-)
>>>> 
>>>> Regards 
>>>> Aish 
>>>> 
>>>> 
>>>> anandhthiyagarajan wrote:
>>>>> 
>>>>> Hi everybody
>>>>> 
>>>>>     I am stuck up with an issue in manipulating the table.
>>>>> 
>>>>> 
>>>>> 
>>>>> Consider the below XML and XSL
>>>>> 
>>>>> <root>
>>>>>     <roadmap>
>>>>>         <years>
>>>>>             <year>2009</year>
>>>>>             <quarters>
>>>>>                 <quarter>Q3</quarter>
>>>>>                 <requirements>
>>>>>                     <requirement>Mp3Player</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>Mp3Player</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>DataCable</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>Mp3Player</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>Mp3Player</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>Bluetooth</requirement>
>>>>>                 </requirements>
>>>>>             </quarters>
>>>>>             <quarters>
>>>>>                 <quarter>Q4</quarter>
>>>>>                 <requirements>
>>>>>                     <requirement>DataCable</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>MemoryCard</requirement>
>>>>>                 </requirements>
>>>>>                 <requirements>
>>>>>                     <requirement>InbuiltCam</requirement>
>>>>>                 </requirements>
>>>>>             </quarters>
>>>>>         </years>
>>>>>     </roadmap>
>>>>> </root>
>>>>> 
>>>>> 
>>>>> XSL:
>>>>> 
>>>>> <xsl:template match="root/roadmap">
>>>>>     <fo:block space-before='2mm'>
>>>>>       <fo:block font-size="10pt" color="black" font-weight="bold"
>>>>> increment-by="1.1.1"  space-before="0.54in" space-after="2pt" >
>>>>>         ROADMAP INFORMATION
>>>>>       </fo:block>
>>>>>       <fo:block space-before='2mm'>
>>>>>       </fo:block>
>>>>>       <fo:table  border-collapse="collapse"  font-size="9pt">
>>>>>         <fo:table-column column-width="1in"/>
>>>>>         <fo:table-column column-width="50%"/>
>>>>>         <fo:table-column column-width="50%"/>
>>>>>         <fo:table-column column-width="50%"/>
>>>>>         <fo:table-column column-width="50%"/>
>>>>>         <fo:table-header color="black"
>>>>> background-color="rgb(39,64,139)"
>>>>>                          font-weight="bold">
>>>>>           <fo:table-row>
>>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> text-align="center">
>>>>>               <fo:block>YEAR</fo:block>
>>>>>             </fo:table-cell>
>>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> text-align="center">
>>>>>               <fo:block>Q1</fo:block>
>>>>>             </fo:table-cell>
>>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> text-align="center">
>>>>>               <fo:block>Q2</fo:block>
>>>>>             </fo:table-cell>
>>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> text-align="center">
>>>>>               <fo:block>Q3</fo:block>
>>>>>             </fo:table-cell>
>>>>>             <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> text-align="center">
>>>>>               <fo:block>Q4</fo:block>
>>>>>             </fo:table-cell>
>>>>>           </fo:table-row>
>>>>>         </fo:table-header>
>>>>>         <fo:table-body>
>>>>>           <xsl:for-each select="years">
>>>>>             <fo:table-row>
>>>>>               <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> background-color="rgb(255,255,255)" text-align="center">
>>>>>                 <fo:block><xsl:value-of select="year"/></fo:block>
>>>>>               </fo:table-cell>
>>>>>               <xsl:for-each select="quarters">
>>>>>                 <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> background-color="rgb(255,255,255)" text-align="center">
>>>>>                   <fo:block><xsl:value-of select="."/></fo:block>
>>>>>                 </fo:table-cell>
>>>>>                 <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> background-color="rgb(255,255,255)" text-align="center">
>>>>>                   <fo:block><xsl:value-of
>>>>> select="requirement"/></fo:block>
>>>>>                 </fo:table-cell>
>>>>>                 <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> background-color="rgb(255,255,255)" text-align="center">
>>>>>                   <fo:block><xsl:value-of
>>>>> select="requirement"/></fo:block>
>>>>>                 </fo:table-cell>
>>>>>                 <fo:table-cell padding="2pt" border="1pt solid black"
>>>>> background-color="rgb(255,255,255)" text-align="center">
>>>>>                   <fo:block><xsl:value-of
>>>>> select="requirement"/></fo:block>
>>>>>                 </fo:table-cell>
>>>>>               </xsl:for-each>
>>>>>             </fo:table-row>
>>>>>           </xsl:for-each>
>>>>>         </fo:table-body>
>>>>>       </fo:table>
>>>>>     </fo:block>
>>>>>   </xsl:template>
>>>>> 
>>>>> 
>>>>> I am attaching a file with this which contain the required ouptut.
>>>>> 
>>>>>  http://old.nabble.com/file/p27430837/Table.doc Table.doc 
>>>>> 
>>>>> 
>>>>> 
>>>>> But i am not getting that output instead it throws a exception. Please
>>>>> let me know if i am missing something.
>>>>> 
>>>>> The stack trace is as follows
>>>>> 
>>>>> java.lang.ArrayIndexOutOfBoundsException: -2
>>>>> 
>>>>> Cocoon stacktrace:
>>>>> 
>>>>> java.lang.ArrayIndexOutOfBoundsException: -2
>>>>> context://prd-doc/doc2road.xsl - 7:18
>>>>> 
>>>>> Failed to process pipeline
>>>>> context://prd-doc/doc2road.xsl - 7:18 [TransformerException]
>>>>> context://prd-doc/sitemap.xmap - 63:46 <map:serialize type="fo2pdf">
>>>>> context://prd-doc/sitemap.xmap - 62:51 <map:transform>
>>>>> context://prd-doc/sitemap.xmap - 61:45 <map:generate>
>>>>> context://sitemap.xmap - 1034:92 <map:mount>
>>>>> 
>>>>> Any help would be greatly appreciated.
>>>>> 
>>>>> 
>>>>> 
>>>>> Thanks in Advance
>>>>> 
>>>>> Anandh
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Table-Manipulation-tp27430837p27450029.html
Sent from the w3.org - www-xsl-fo mailing list archive at Nabble.com.
Received on Thursday, 4 February 2010 09:45:19 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Thursday, 4 February 2010 09:45:23 GMT