[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Summarising XML datasets


Subject: RE: [xsl] Summarising XML datasets
From: "Chris Hicks" <chrish2000@xxxxxxxxxxxxxx>
Date: Tue, 21 Dec 2004 20:25:37 +1100

Thanks Jarno,

I've tried following the example from Jeni's site and come up with the
following:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="idkey" match="photograph" use="id"/>
<xsl:key name="subjectkey" match="photograph" use="id"/>
<xsl:template match="/">
     <xsl:apply-templates select="results"/>
</xsl:template>

<xsl:template match="results">
    <xsl:for-each select="photograph[count(. | key('idkey', id)[1])=1]">
        <h3><xsl:value-of select="id" /></h3>
        <h4><xsl:value-of select="name"/></h4>
        <h5><xsl:value-of select="description"/></h5>
	<xsl:for-each select="key('subjectkey', id)">
            <TABLE border="0" width="75%">
                <tr>
                    <th width="10%" align="right">Subject</th>
                    <td width="90%" align="left"><xsl:value-of
select="subject" /></td>
                </tr>
            </TABLE>
            <hr width="75%" align="left"/>
         </xsl:for-each>
  
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

This works unless I have a duplicate subject node, which actually can
happen.

I'm a little bit stuck with how to only display unique subjects.

Any help would be appreciated.

Cheers,

Chris

 

> -----Original Message-----
> From: Jarno.Elovirta@xxxxxxxxx [mailto:Jarno.Elovirta@xxxxxxxxx] 
> Sent: Tuesday, 21 December 2004 7:16 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Summarising XML datasets
> 
> Hi,
> 
> > I have a problem formatting some XML I am receiving from a 
> 3rd party 
> > application that I cannot alter.
> > 
> > The application is querying a database that has a table 
> called photo 
> > and a table called photosubject, there is a one to many 
> relationship 
> > between photo and photosubject.
> 
> snip
> 
> > What I want to do if possible is to render the information 
> using xslt 
> > as:
> > 
> > HouseID  |  House  |  Description | Subjects 
> > ===========================================
> > 1        |  House  |  House 1     | X, Y, Z
> 
> XSLT 2.0 solution
> 
>   <tbody>
>     <xsl:for-each-group select="results/photograph" group-by="id">
>       <tr>
>         <td>
>           <xsl:value-of select="id"/>
>         </td>
>         <td>
>           <xsl:value-of select="name"/>
>         </td>
>         <td>
>           <xsl:value-of select="description"/>
>         </td>
>         <td>
>           <xsl:value-of select="current-group()/subject" 
> separator=", "/>
>         </td>
>       </tr>
>     </xsl:for-each-group>
>   </tbody>
> 
> See <http://www.jenitennison.com/xslt/grouping/> how to 
> achieve this using XSLT 1.0 and the Muenchian Method.
> 
> Cheers,
> 
> Jarno


Current Thread
Keywords