This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: counting matches between list items
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] counting matches between list items
- From: "Michael Kay" <mhkay at iclway dot co dot uk>
- Date: Wed, 20 Jun 2001 17:01:08 +0100
- Reply-To: xsl-list at lists dot mulberrytech dot com
> I'm new to XSL, so this might be a simple question. I'm
> trying to compare
> the items in two lists using XSL to check if an item at a
> certain position
> in the two lists matches. For example, the lists below have 1
> matching item.
>
> <LISTS>
> <LIST_A>
> <ITEMS>
> <ITEM type="dog" />
> <ITEM type="cat" />
> <ITEM type="fish" />
> </ITEMS>
> </LIST_A>
> <LIST_B>
> <ITEMS>
> <ITEM type="dog" />
> <ITEM type="fish" />
> <ITEM type="cat" />
> </ITEMS>
> </LIST_B>
> </LISTS>
There may be a more direct solution, but you could try
<xsl:variable name="listB" select="LISTS/LIST_B/ITEMS"
<xsl:variable name="matches">
<xsl:for-each select="LISTS/LIST_A/ITEMS/ITEM">
<xsl:variable name="pos" select="position()"/>
<xsl:if test="@type = $listB/ITEM[$pos]/@type">Z</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="string-length($matches)"/>
Mike Kay
Software AG
> I've tried using count() <xsl:variable name="listMatches"
> select="count(LISTS/LIST_A/ITEMS[normalize-space(./attribute::
> type)=LISTS/LI
> ST_B/ITEMS/attribute::type])"/> But count() does not take the
> position of
> the elements into account. I can't figure out how to
> accumulate a count
> using <xsl:for-each>. If anyone has any suggestions, please
> let me know.
> Thanks,
> - Matthew
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list