[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