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

RE: [xsl] matching the first following sibling


Subject: RE: [xsl] matching the first following sibling
From: kakridge@xxxxxxxxxxxxx
Date: Thu, 22 Jan 2004 11:33:51 -0500

Your example didn't provide $productId.  You were on the right track,
but using this method is much cleaner.

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

<xsl:key name="total" match="Substance" use="productId"/>

	<xsl:template match="ProductList">
		<xsl:for-each select="Substance[productId[not(. =
preceding::productId)]]">
			<xsl:sort select="Substance/productId"/>
			<xsl:value-of select="concat(productId, ': ')"/>
			<xsl:value-of select="concat(sum(key('total',
productId)/num), ' ')"/><br/>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>

-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Biying Huang
Sent: Thursday, January 22, 2004 10:56 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Cc: btusdin@xxxxxxxxxxxxxxxx
Subject: [xsl] matching the first following sibling

Dear All,

I have trouble with matching the first following sibling which has a
child's value differ from the current one's.

I need my output look like this:

3000: 9
5000: 5
4000: 8

But I can only get the first line,  3000 : 9

Here is my xslt:

<xsl:template match="ProductList">
    <xsl:apply-templates select="Substance[position() = 1 ]" />
</xsl:template>

<xsl:template match="Substance">
  <xsl:value-of select = "productId"/>
   :
  <xsl:value-of select = "sum( num  |
following-sibling::Substance[productId = $productId ]/num)" />

  <!--  now check if there is another unique product, if so, call this
template recursively, but this DOES NOT work   -->
  <xsl:apply-templates select="following-sibling::Substance[productId
!=  ./productId and position() = 1 ]" />

</xsl:template>


I have this xml data:

<ProductList>
  <Substance>
      <productId>3000</productId>
      <num>3</num>
   </Substance>
  <Substance>
      <productId>4000</productId>
      <num>4</num>
   </Substance>
  <Substance>
      <productId>3000</productId>
      <num>3</num>
   </Substance>
  <Substance>
      <productId>5000</productId>
      <num>5</num>
   </Substance>
  <Substance>
      <productId>4000</productId>
      <num>4</num>
   </Substance>
  <Substance>
      <productId>3000</productId>
      <num>3</num>
   </Substance>
 </ProductList>



Thanks in advance for your help.

Biying Huang


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


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



Current Thread
Keywords
xml