Subject: Re: [xsl] RE: (Keys on multiple element types) From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Tue, 5 Feb 2002 11:55:16 +0000 |
Hi Ahmad, > You are correct in that I am trying to get to grips with keys, but I > didnt appreciate that they automatically removed duplicates based on > certain conditions, i.e if two say <project> nodes were the same. The keys don't; using the Muenchian method (which uses keys for efficiency) does. The duplicates are removed by the statement: *[generate-id(.) = generate-id(key('rows', name)[1])] where you select all the elements that are the same element as the element you get when you use the 'rows' key with that element's name (i.e. selects the first element with a particular name in the document). The other elements with that name are still there. > Jeni's reply would be to use: - > > <xsl:key name="rows" match="FILES/*" > use="concat(project(), '+', name)" /> I suggested: <xsl:key name="rows" match="FILES/*" use="concat(name(), '+', name)" /> Note that name() is an XPath function that retrieves the name of a node (in this case the name of the element that you're indexing with the key) - in your examples it would return things like 'RECORDA', 'RECORDB' or 'RECORDC'. That means that the key values would be things like 'RECORDA+Fred' or 'RECORDC+Harry'. To get the unique values, you'd need: *[generate-id(.) = generate-id(key('rows', concat(name(), '+', name))[1])] You might find http://www.jenitennison.com/xslt/grouping helpful. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] RE: (Keys on multiple ele, Michael Kay | Thread | Re: [xsl] RE: (Keys on multiple ele, Ahmad J. Reeves |
RE: [xsl] RE: (Keys on multiple ele, Michael Kay | Date | [xsl] sort and if, Ilyasov Jienbay |
Month |