This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Finding the maximun number of nodes


Thank you for your help.  However, this solution doesn't seem to solve the
problem if there is more than one table in the HTML file because using
<xsl:variable> requires us to know how many tables are there in advance, if
we are given the HTML files at process-time.

Dimitre's solution makes use of <xsl:key>, something that I am not familiar
with.  However, I believe it still doesn't work if the stylesheet has to
handle an unknown number of tables.

Michael Lee
mlee@kanhan.com



----- Original Message -----
From: "Jiri Jirat" <Jiri.Jirat@idoox.com>


Hello Michael,
 here is the solution:

XSL:
========
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<xsl:variable name="maximum">
 <xsl:apply-templates select="table" mode="howmany"/>
</xsl:variable>

<xsl:template match="/">
 <table columns="{substring-before($maximum,'~')}">
  <!-- ...  -->
 </table>
</xsl:template>

<xsl:template match="table" mode="howmany">
  <xsl:apply-templates select="tr" mode="howmany">
   <xsl:sort select="count(td)" order="descending" data-type="number"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="tr" mode="howmany">
 <xsl:value-of select="count(td)"/>
 <xsl:text>~</xsl:text>
</xsl:template>

</xsl:stylesheet>

Output:
=======
<?xml version="1.0" encoding="utf-8"?>
<table columns="3"/>



Michael Lee wrote:

> I am writing a XSLT stylesheet to transform a simple table from HTML to
> WML. However, the "columns" attribute is required for the "table" element
> in the latter format.  Therefore, I must be able to determine the maximum
> number of cells in the rows and use it as the value for the "columns"
> attribute.
>
> The problem is that there is no way I can store and compare the result
> after I count the number of <td> in each <tr>.  I can do a sort and then
> count the first or last row, but then there is no way I can unsort the
> rows again to preserve the original output.
>
> Does anyone have any idea if this problem has a purely XSLT solution?  The
> following is my input and desired output:
>
> HTML input:
>
> <table>
>    <tr><td>(1,1)</td></tr>
>    <tr><td>(2,1)</td><td>(2,2)</td><td>(2,3)</td></tr>
>    <tr><td>(3,1)</td><td>(3,2)</td></tr>
> </table>
>
> WML output:
>
> <table columns="3">
>    <tr><td>(1,1)</td></tr>
>    <tr><td>(2,1)</td><td>(2,2)</td><td>(2,3)</td></tr>
>    <tr><td>(3,1)</td><td>(3,2)</td></tr>
> </table>



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]