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

Re: Re: Keys on multiple element types

Subject: Re: Re: Keys on multiple element types
From: "Ahmad J. Reeves" <ahmad@xxxxxxxxxxxxxx>
Date: Tue, 05 Feb 2002 10:41:56 +0000
get multiple element by id
Hi Jen,

Thanks for the reply. Justy as I was opening it I thought,
"I bet I'm just missing brackets or something" et voila.

Cheers

Ahmad


At 10:02 AM 2/5/02 +0000, you wrote:
>Hi Ahmad,
>
>> q1. Whats wrong with the stylesheet that it doesnt do this. I think its :-
>> select="RECORDA[generate-id(.
>>
>> but every other path I try ends up with no output.
>
>You're correct that it's that part of the stylesheet that's causing
>the problem. The problem is that you're selecting only the RECORDA
>elements, but you're interested in the RECORDB and RECORDC elements as
>well. One method would be to select the unique ones from all three
>types as follows:
>
>  (RECORDA | RECORDB | RECORDC)
>    [generate-id(.) = generate-id(key('rows', name)[1])]
>
>Or you could just select all the element children of the current FILES
>element, and filter to select only those that appear first in the
>document with a particular name, as follows:
>
>  *[generate-id(.) = generate-id(key('rows', name)[1])]
>
>If you didn't want to list all the RECORD names, you could do a
>similar thing with the definition of the key - make it match those
>elements that are children of the FILES element, no matter what their
>name is:
>
><xsl:key name="rows" match="FILES/*" use="name" />
>
>> q2. Does the vertical bar | mean 'or', and wouldnt it be better to
>> use ',' which I think means 'and'? When I tried ',' it threw up
>> loads of exceptions.
>
>In an expression, the vertical bar (|) means 'union'. In the example
>above, (RECORDA | RECORDB | RECORDC) creates a union of the nodes that
>you select with the individual expressions RECORDA, RECORDB and
>RECORDC, so you get all RECORDA, RECORDB and RECORDC elements.
>
>In a pattern (a match attribute), the vertical bar gives alternative
>patterns. So the pattern RECORDA | RECORDB | RECORDC matches RECORDA,
>RECORDB and RECORDC elements.
>
>The comma (,) isn't an operator in XPath 1.0 (it's only used to
>separate arguments in a function call). You might have been confused
>by recent discussions on this list, because the comma *is* an operator
>in XPath 2.0 (at least in the current WDs), where it's used to
>construct a sequence. In XPath 2.0, if you do (RECORDA | RECORDB |
>RECORDC) then you get the RECORDA, RECORDB and RECORDC elements in
>whatever order they appear. If you do (RECORDA, RECORDB, RECORDC) then
>you get all the RECORDA elements followed by all the RECORDB elements
>followed by all the RECORDC elements. But this doesn't apply in XPath
>1.0 (and XSLT 1.0).
>
>To do 'or', use the operator 'or' (e.g. name = 'foo' or name = 'bar').
>To do 'and', use the operator 'and' (e.g. name = 'foo' and name =
>'bar').
>
>> q.3 If the xml looked like this instead...
>>
>> <FILES>
>>         <RECORDA>
>>         <id>13</id><name>Fred</name><project_name>Building</project_name>
>>         </RECORDA>
>>         <RECORDA>
>>         <id>14</id><name>Fred</name><project_name>Building</project_name>
>>         </RECORDA>
>>         <RECORDB>
>>         <id>15</id><name>Fred</name><project_name>Looking</project_name>
>>         </RECORDB>
>>         <RECORDC>
>>         <id>16</id><name>Harry</name><project_name>Writing</project_name>
>>         </RECORDC>
>> </FILES>
>>
>> How could I get the result to remove multiple copies e.g. to output
>> <id>13</id> but not <id>14</id>
>
>I'm not sure what a 'multiple copy' is in the above. Should the
>RECORDB with id 15 be output or not? If so, you need to define a key
>that indexes the records on both the name of the element (e.g.
>'RECORDA', 'RECORDB' or 'RECORDC') and the name element child (e.g.
>'Fred' or 'Harry'). That kind of key might look like:
>
><xsl:key name="rows" match="FILES/*"
>         use="concat(name(), '+', name)" />
>
>Cheers,
>
>Jeni
>
>---
>Jeni Tennison
>http://www.jenitennison.com/
>
>
> XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>
-------------------------------------------------
Ahmad J Reeves BSc (Hons) MSc (Dist) PhD Student
Information, Media & Communication Research Group
Department of Computer Science
Queen Mary, University of London
E1 4NS
Tel +44(0) 207 882 5257
Fax +44(0) 208 980 6533
http://www.dcs.qmw.ac.uk/imc

 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-2013 All Rights Reserved.