|
top
|
 Subject: xquery for invoice data Author: scott reachard Date: 02 Apr 2009 11:49 AM
|
Thanks!!! that worked great and the link was an interesting read. I think i actually understand some of it!.
I've got one more problem I can't get resolved.
there is header and footer information before and after the line data. I need to include those in the output. I can get it if i specifically name each section, but i was hoping to have a more flexible way to do it.
input document looks something like this:
<root>
<CreatedBy> user, date, system</CreatedBy>
<routing> printer, copies, etc</routing>
<header> header info</header>
<line>
<item>1234</item>
<description>test item<description>
<qty>2</qty>
</line>
<inv><invdata>warehouse 1</invdata></inv>
<inv><invdata>batch 12345</invdata></inv>
<inv><invdata>location 1A</invdata></inv>
<line>
<item>1234</item>
<description>test item<description>
<qty>2</qty>
</line>
<inv><invdata>warehouse 1</invdata></inv>
<inv><invdata>location 1A</invdata></inv>
<totals> total data </totals>
<footerMsg> remit to ....</footerMsg>
</root>
Thanks to the above solution, i've got the line data combined
xquery version "1.0";
declare function local:getRelatedInv($item) {
let $nextItem :=$item/following-sibling::*[local-name()!="Section_Body_BodyInventDim"][1]
for $related in $item/following-sibling::*[local-name()="Section_Body_BodyInventDim"]
where if ($nextItem) then $related << $nextItem else true()
return $related
};
<root>
{
for $line in /Root/Section_Body_BodyInventPickingListJournalLine
return
<allLineData>
{$line/*}
{
for $inv in local:getRelatedInv($line)
let $det := $inv/Field_InventDimPrint
return
if (contains($det,"Batch")) then <Batch>{normalize-space(substring-after($det,":"))}</Batch> else
if (contains($det,"Warehouse")) then <Warehouse>{normalize-space(substring-after($det,":"))}</Warehouse> else
if (contains($det,"Location")) then <Location>{normalize-space(substring-after($det,":"))}</Location> else $det
}
</allLineData>
}
</root>
how can i include the header and footer nodes?
thanks for any help, I've been trying to figure this out on my own (i learn it better that way), but i've reached my I give up point.
|
|
|