this is a grouping problem (ask google for muenchian grouping)
assuming you want to distinguish on all those child elements and
attributes, and none of them have a : character (any character you can
use as a separator) then first build a key:
<xsl:key name="x" match="item" use="
concat(name,':',type,':',carried,':',cost/@name,':',cost/@value,':',weight)"/>
now step through all the items, just taking the first with each key
value
<xsl:for-each select="items/item[
generate-id(.)=generate-id(key('x',
concat(name,':',type,':',carried,':',cost/@name,':',cost(_at_)value,':',weight))[1])]">
<xsl:copy-of select="."/>
or whatever else you want to do with these items
</xsl:for-each>
Not tested
David
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list