|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] solutions to an Excel XML processing problemJohn Snelson jsnelson at sleepycat.comThu Aug 24 02:07:21 PDT 2006
Something like this seems to do the job: declare function local:expand($column as xs:integer, $max as xs:integer, $input as element()?) as element()* { if($input) then if($input/@i) then ( for $i in ($column to xs:integer($input/@i) - 1) return <c/>, <c>{ $input/node() }</c>, local:expand(xs:integer($input/@i) + 1, $max, $input/following-sibling::c[1]) ) else ( $input, local:expand($column + 1, $max, $input/following-sibling::c[1]) ) else for $i in ($column to $max) return <c/> }; let $in := <row cnt="30"> <c i="3">third</c> <c>fouth</c> <c>fifth</c> <c i="10">tenth</c> <c>eleventh</c> <c i="20">twentieth</c> <c>twenty-one</c> <c>twenty-two</c> <c>twenty-three</c> </row> return local:expand(1, xs:integer($in/@cnt), $in/c[1]) John Daniela Florescu wrote: > Dear all, > > I am trying to find various solutions to the following XML to XML > transformation problem. > It is taken out of real world Excel spreadsheets data processing. > > (Input) The data is composed of cells and some of the cells are empty > (no content). > This version of the data is in compressed form, i.e. does not contain > the empty cells and is using the > attribute @i to express jumps to the next non empty cell (using the > position). It looks like this: > ===================================================================== > > > <row cnt="30"> > <c i="3">third</c> > <c>fouth</c> > <c>fifth</c> > <c i="10">tenth</c> > <c>eleventh</c> > <c i="20">twentieth</c> > <c>twenty-one</c> > <c>twenty-two</c> > <c>twenty-three</c> > </row> > > > (Ouput) Write an XQuery to transform the XML data in the uncompressed form > that includes the empty cells, as follows: > ============================================================= > > <row cnt="30"> > <c/> > <c/> > <c>third</c> > <c>fouth</c> > <c>fifth</c> > <c/> > <c/> > <c/> > <c/> > <c>tenth</c> > <c>eleventh</c> > <c/> > <c/> > <c/> > <c/> > <c/> > <c/> > <c/> > <c/> > <c i="20">twentieth</c> > <c>twenty-one</c> > <c>twenty-two</c> > <c>twenty-three</c> > ... > </row> > > > I know it can be done in a variety of ways, I am just looking for the > "best" (i.e. simplest) XQuery > to achieve this purpose that people on this list can help me find. > > Thanks in advance, > Dana > > _______________________________________________ > http://xquery.com/mailman/listinfo/talk > http://xquery.com/mailman/listinfo/talk
|
Purchase Stylus Studio Online Today!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






