Filtering the nodes passed to a template...

Subject: Filtering the nodes passed to a template...
From: "Callum Elliott" <c.j.elliott-96@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 31 Mar 2000 10:24:31 +1100
Thanks for the reply Mike,

I'm still having problems though...perhaps if I explain it more cleary...

This is my XML:-

<report>
<payments>
	<payment id="..."/>
	<payment id="..."/>
</payments>
<paymentTypes>
	<paymentType paymentTypeRef="..." desc="..."/>
	<paymentType paymentTypeRef="..." desc="..."/>
</paymentTypes>
</report>

Basically, I want to

1. print out all the @paymentTypeRef and @desc only if the @paymentTypeRef
matches a payments/@id

2. if the @paymentTypeRef matches the one printed before it, I only want the
@desc displayed

...So in the end, my output will look like this

PaymentType	Desc
CASH		Cash
CCDEBTOR	Amex
		Visa
		Diners
CHEQUE	Cheque

I can do no.1 fine with the following line...

<xsl:apply-templates select="paymentType[@paymentTypeRef =
/report/payments/payment/@id]">

and in that template I use...

  <xsl:if test="@paymentTypeRef !=
../preceding-sibling::paymentType/@paymentTypeRef]">
    <xsl:value-of select="@paymentTypeRef"/>
  </xsl:if>

but this seems to reference the original XML and not the filtered XML which
is passed into the template.  So I need a way of accessing and testing
values in the filtered node set, and not the original.

Thanks again,

Callum


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


Current Thread