Re: How to find unique element.

Subject: Re: How to find unique element.
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 18 May 1999 14:04:35 +0100 (BST)
> <xsl:functions ns="jjc" type="text/javascript"> 
>      ~/some processing instructions 
> </xsl:functions>
> would be one way.

Script may work, but it may be worth seeing how far you can get without
scripting. 

The original questions were 

> Problems:
> 1) How do i find out unique projectcodes?
> 2) How to display the total hours put in by all the employees in a
>    particular project?

which I think means that you want something like the following
for the example XMl you posted?

  bash-2.01$ xt p2.xml p.xsl

  ======================
  Project p1
  Employee: 1,  Hours: 10
  Employee: 2,  Hours: 14
  Total: 24
  ======================
  
  ======================
  Project p2
  Employee: 1,  Hours: 8
  Employee: 2,  Hours: 6
  Total: 14
  ======================
  
  ======================
  Project p3
  Employee: 2,  Hours: 12
  Total: 12
  ======================
  bash-2.01$ 


If so, you may want to play with the xml code at the end of this msg.

David



<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/XSL/Transform/1.0";
  result-ns="">


<xsl:template match="company">
  <xsl:apply-templates mode="find" select="Employee/project/@pcode">
  </xsl:apply-templates>
</xsl:template>


<xsl:template mode="find" match="@pcode">
<!-- grab first occurrence -->
 <xsl:variable name="x" expr="."/>
 <xsl:if test="not(from-following(*[@pcode=$x]))">
  ======================
  Project <xsl:value-of select="$x"/>
 <xsl:apply-templates select="/from-descendants(project[@pcode=$x][1])">
  <xsl:param name="hlours" expr="0"/>
  <xsl:param name="x" expr="$x"/>
 </xsl:apply-templates>
 </xsl:if>
</xsl:template>

<xsl:template match="project">
 <xsl:param-variable name="x" />
 <xsl:param-variable name="hours" />
  Employee: <xsl:value-of select="../@empcode"
/>,  Hours: <xsl:value-of select="duration/@hours"/>
 <xsl:apply-templates select="from-following(project[@pcode=$x][1])">
  <xsl:param name="hours" expr="$hours+duration/@hours"/>
  <xsl:param name="x" expr="$x"/>
 </xsl:apply-templates>
  <xsl:if test="not(from-following(project[@pcode=$x]))">
  Total: <xsl:value-of select="$hours+duration/@hours"/>
  ======================
  </xsl:if>

</xsl:template>



</xsl:stylesheet>


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


Current Thread