This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: following-sibling or grouping maybe
- From: Steve Rosenberry <Steve dot Rosenberry at ElectronicSolutionsCo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Wed, 08 May 2002 09:39:11 -0400
- Subject: Re: [xsl] following-sibling or grouping maybe
- Organization: Electronic Solutions Company
- References: <E18972FDE634D611A4670030847664620B1948@AGROSERVER>
- Reply-to: xsl-list at lists dot mulberrytech dot com
A more structured approach to XML/XSLT problem below:
================================================================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<xsl:apply-templates select="table"/>
</html>
</xsl:template>
<xsl:template match="table">
<table border="1">
<xsl:apply-templates select="row"/>
</table>
</xsl:template>
<xsl:template match="row">
<!-- a freebie that eliminates empty rows -->
<xsl:if test="*/data/node() or */comment/node()">
<tr><xsl:apply-templates select="cell"/></tr>
</xsl:if>
</xsl:template>
<xsl:template match="cell">
<!-- if this node has data or comment nodes or any of the
following sibling nodes have data or comment nodes,
-->
<xsl:if test="data/node() or
comment/node() or
following-sibling::*/data/node() or
following-sibling::*/comment/node()" >
<td>
<xsl:value-of select="@id"/>
<xsl:if test="data/node() or comment/node()">
<xsl:value-of select="."/>
</xsl:if>
</td>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
================================================================================
--
Steve Rosenberry
Sr. Partner
Electronic Solutions Company -- For the Home of Integration
http://ElectronicSolutionsCo.com
http://BetterGoBids.com -- The Premier Overture (formerly GoTo)
Bid Management Tool
(610) 670-1710
Matts Isuls wrote:
>
> Hi
>
> I would like to transform XML like the sample below to a HTML table. I dont
> want to add any more cells to the HTML rows if the current cell's <data> and
> <comment> or the following cells on the same row are empty.
>
> the XSL below produces this:
>
> <html><table border="1">
> <tr><td>1 aa </td><td>2 bb </td><td>3 </td><td>4 </td></tr>
> <tr><td>1 aa </td><td>2 </td><td>3 </td><td>4 dd </td></tr>
> </table></html>
>
> but i would like it this way:
>
> <html><table border="1">
> <tr><td>1 aa </td><td>2 bb </td></tr>
> <tr><td>1 aa </td><td>2 </td><td>3 </td><td>4 dd </td></tr>
> </table></html>
>
> thanks,
> matts isuls
>
> ###################
>
> <?xml version="1.0"?>
> <table>
> <row>
> <cell id="1">
> <data>aa</data>
> <comment></comment>
> </cell>
> <cell id="2">
> <data></data>
> <comment>bb</comment>
> </cell>
> <cell id="3">
> <data></data>
> <comment></comment>
> </cell>
> <cell id="4">
> <data></data>
> <comment></comment>
> </cell>
> <cell id="5">
> <data></data>
> <comment></comment>
> </cell>
> </row>
> <row>
> <cell id="1">
> <data>aa</data>
> <comment></comment>
> </cell>
> <cell id="2">
> <data></data>
> <comment></comment>
> </cell>
> <cell id="3">
> <data></data>
> <comment></comment>
> </cell>
> <cell id="4">
> <data>dd</data>
> <comment></comment>
> </cell>
> <cell id="5">
> <data></data>
> <comment></comment>
> </cell>
> </row>
> </table>
>
> ####################################
>
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:template match="/">
> <html>
> <table border="1">
> <xsl:for-each select="/table/row">
> <tr>
> <xsl:for-each select="cell">
> <xsl:if test="following-sibling::*!=''">
> <td>
> <xsl:value-of select="@id"/><xsl:value-of select="."/>
> </td>
> </xsl:if>
> </xsl:for-each>
> </tr>
> </xsl:for-each>
> </table>
> </html>
> </xsl:template>
> </xsl:stylesheet>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list