[xquery-talk] Generating an element sequence matching a template
Howard Katz
howardk at fatdog.com
Tue Apr 25 16:30:23 PDT 2006
Here's the current syntax for your query, Liam:
for $e in $headers (: or $template, as I was calling it earlier :-)
return
if ($row-data[local-name() = $e] )
then $row-data[local-name() = $e]
else element { $e }{ }
This one produces two <e_1>123</e_1> nodes. I think Mike's got the right
idea of using position() and maybe count() to ensure that the correct data
node gets picked up in the proper order; I think I just need to play with it
some.
Howard
> -----Original Message-----
> From: talk-bounces at xquery.com
> [mailto:talk-bounces at xquery.com] On Behalf Of Liam Quin
> Sent: April 25, 2006 3:11 PM
> To: Howard Katz
> Cc: talk at xquery.com
> Subject: Re: [xquery-talk] Generating an element sequence
> matching a template
>
> On Tue, Apr 25, 2006 at 02:13:21PM -0700, Howard Katz wrote:
> > It actually gets a bit harder yet. If we now omit the
> first <e_1> in the
> > row-data:
> >
> > let $headers := ( "e_1", "e_2", "e_3", "e_1", "e_4" )
> > let $row-data := ( <e_3>33</e_3>, <e_1>123</e_1>, <e_4>44</e_4> )
> >
> > we end up with:
> >
> > <e_1>123</e_1>, <e_2/>, <e_3>33</e_3>, <e_1/>, <e_4>44</e_4>
> >
> > I'm not 100% sure about this, but I would think a more
> "correct" ordering
> > would be one that preserved the original order of
> $row-data as much as
> > possible, as in:
> >
> > <e_1/>, <e_2/>, <e_3>33</e_3>, <e_1>123</e_1>, <e_4>44</e4>
>
> I'd probably try to write very pedestrian, simple code first...
>
> for $e in $headers
> if ($row-data[local-name() = $e])
> then $row-data[local-name() = $e])
> else <element name="{$e}"></element>
>
> (I don't remember if we ended up allowing such dynamic constructors
> but I hope so!)
>
>
> Liam
>
> --
> Liam Quin, W3C XML Activity Lead, http://www.w3.org/People/Quin/
> http://www.holoweb.net/~liam/
> _______________________________________________
> talk at xquery.com
> http://xquery.com/mailman/listinfo/talk
>
More information about the talk
mailing list