[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Filter nodelist

Subject: RE: Filter nodelist
From: "Adam van den Hoven" <list@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 27 Nov 2002 13:11:52 -0800
xsl build nodelist
Ok so this is a few weeks over old. 

Assuming that a product node is current, I'd use:

count(preceding-sibling::product[@id=current()/@id])

That is, I took the following XML:
<products>
	<product id="A"/>
	<product id="B"/>
	<product id="C"/>
	<product id="B"/>
	<product id="B"/>
	<product id="D"/>
	<product id="E"/>
</products>

And applied the following transform (essentially the identity transform
with this calculation added to the product)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="node()|@*">
		<xsl:copy>
			<xsl:apply-templates select="*|@*"/>
		</xsl:copy>
	</xsl:template>

	<xsl:template match="product">
		<xsl:copy>
			<xsl:attribute name="previous_same_id_count">
				<xsl:value-of
select="count(preceding-sibling::product[@id=current()/@id])"/>
			</xsl:attribute>
			<xsl:apply-templates select="*|@*"/>
		</xsl:copy>
	</xsl:template>
</xsl:stylesheet>


And got the following result (running from within Stylus Studio)

<?xml version='1.0' ?>
<products>
  <product id="A" previous_same_id_count="0"/>
  <product id="B" previous_same_id_count="0"/>
  <product id="C" previous_same_id_count="0"/>
  <product id="B" previous_same_id_count="1"/>
  <product id="B" previous_same_id_count="2"/>
  <product id="D" previous_same_id_count="0"/>
  <product id="E" previous_same_id_count="0"/>
</products>

Which should be the thing you are looking for. 

Adam




> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Martin Kupisch
> Sent: November 7, 2002 3:11 AM
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  Filter nodelist
> 
> 
> Hello everyone,
> 
> I have an XML document that contains a few 'product' elements 
> with 'id' attributes. Because I have to operate on these 
> products a few times I build a variable that just takes all 
> products with the expression 'descendant::product'. Sometimes 
> I have to iterate over all products. But that is not all I do 
> with the list. My problem: I have to get the count of all 
> products from this node-list that have the same id like a 
> certain product in the list  and that's position in the 
> node-list is lower. Example:
> 
> [product id="A",
>  product id="B",
>  product id="C",
>  product id="B",
>  product id="B",  <-
>  product id="D",
>  product id="E"]
> 
> So if I have the product at position 5 the result of the 
> count should be 2, because of the products at position 2 and 
> 4 with the same id.
> 
> Any ideas? Thanks.
> 
> 
>  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2007 All Rights Reserved.