xsl-list
[Top] [All Lists]

Re: [xsl] Display more than one table in generic xslt - reg

2010-03-26 10:28:46
Dear Martin,

Is this technique called as Muenchian Grouping technique ?

Regards,
Ramesh

On Wed, Mar 24, 2010 at 4:04 PM, Martin Honnen 
<Martin(_dot_)Honnen(_at_)gmx(_dot_)de> wrote:
Ramesh Kumar wrote:

The required HTML output is like....

<HTML><BODY>
<Table>
<TR><TD>
<Table border="1">
<tr><td>SysID</td><td>WFDocID</td></tr>
<tr><td>-2008080800041</td><td>0</td></tr>
</Table>
</TD></TR>
<TR><TD>&nbsp;</TD></TR>
<TR><TD>
<Table border="1">
<tr><td>SysID</td><td>ParentSysID</td></tr>
<tr><td>-2008080800045</td><td>-2008080800041</td></tr>
<tr><td>-2008080800046</td><td>-2008080800041</td></tr>
</Table>
</TD></TR>
</Table>
</Body>
</HTML>

Here is an XSLT 1.0 stylesheet:

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

 <xsl:output method="html" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="by-name"
          match="/*/*"
          use="concat('{', namespace-uri(), '}', local-name())"/>

 <xsl:template match="/">
   <html>
     <body>
       <table>
         <tbody>
           <xsl:apply-templates select="*/*[generate-id() =
generate-id(key('by-name', concat('{', namespace-uri(), '}',
local-name()))[1])]" mode="table"/>
         </tbody>
       </table>
     </body>
   </html>
 </xsl:template>

 <xsl:template match="/*/*" mode="table">
  <tr>
    <td>
      <table border="1">
        <thead>
          <tr>
            <xsl:apply-templates mode="th"/>
          </tr>
        </thead>
        <tbody>
          <xsl:apply-templates select="key('by-name', concat('{',
namespace-uri(), '}', local-name()))"/>
        </tbody>
      </table>
    </td>
  </tr>
  <xsl:if test="position() != last()">
    <tr>
      <td>&#160;</td>
    </tr>
  </xsl:if>
 </xsl:template>

 <xsl:template match="/*/*/*" mode="th">
   <th>
     <xsl:value-of select="local-name()"/>
   </th>
 </xsl:template>

 <xsl:template match="/*/*">
   <tr>
     <xsl:apply-templates/>
   </tr>
 </xsl:template>

 <xsl:template match="/*/*/*">
   <td>
     <xsl:value-of select="."/>
   </td>
 </xsl:template>

</xsl:stylesheet>

Its output is a bit more structured (using tbody, thead, and th) than your
sample but it should give you an idea how to approach that.

--

       Martin Honnen
       http://msmvps.com/blogs/martin_honnen/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





-- 


Regards,
Ramesh

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--