xsl-list
[Top] [All Lists]

Re: Using XSL to Translate Repetitive-Node XML to Table with COLSPANs

2004-02-12 15:30:52
Hi Leo,

At 03:49 PM 2/12/2004, you wrote:
                        <data columnid="01" name="Feb"/>
                        <data columnid="11" name="Feb"/>
                        <data columnid="21" name="Feb"/>
                        <data columnid="31" name="Feb"/>
                        <data columnid="41" name="Y-T-D(Feb)"/>
                        <data columnid="51" name="Y-T-D(Feb)"/>
                        <data columnid="61" name="Y-T-D(Feb)"/>
                        <data columnid="71" name="Y-T-D(Feb)"/>

How easy this is depends largely on constraints on your data.

If you can be certain that data elements to be grouped in a cell not only share a @name value, but also are the only ones that have that @name value, it's not so hard:

<xsl:template match="data">
  <xsl:variable name="thisname" select="@name"/>
  <!-- first be sure we emit cells only for the first data element
       with a given name -->
  <xsl:if test="not($thisname = preceding-sibling::data/@name)">
<!-- the colspan is the count of data children of the parent with the same name -->
    <td colspan="{count(../data[(_at_)name = $thisname)}">
      <xsl:apply-templates select="@name"/>
<!-- the built-in default template for attributes will emit its value -->
    </td>
  </xsl:if>
</xsl:template>

If however you might have a situation like

  <data columnid="01" name="Feb"/>
  <data columnid="11" name="Feb"/>
  <data columnid="21" name="Feb"/>
  <data columnid="31" name="Feb"/>
  <data columnid="41" name="Y-T-D(Feb)"/>
  <data columnid="51" name="Feb"/>

... it's harder. Considerably harder (though not impossible).

So which is it?

Cheers,
Wendell




======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


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