Subject:Flat File Custom XML conversion help Author:Stanley Bowling Date:28 Sep 2010 12:59 PM
Hello,
I am reposting this in the correct section.
We have a flat file coming from our source system which represents child nodes as new lines in the same file. The child nodes can be identified by the first two characters of the line.
I need help to get the child nodes attached to the parent xml node. Can you help me figure out how this can be done. I have attached an example and the progress so far.
As in the example attached, the contact is displayed outside the customer,
<Customer>
<Type>A</Type>
<Number>1000</Number>
<FirstName>Casey</FirstName>
<LastName>Adams</LastName>
</Customer>
<Contact>
<ContactType>#C</ContactType>
<Number>585-433-1233</Number>
</Contact>
<Customer>...
I require the contact region to display as a child of customer like this.
<Customer>
<Type>A</Type>
<Number>1000</Number>
<FirstName>Casey</FirstName>
<LastName>Adams</LastName>
<Contact>
<ContactType>#C</ContactType>
<Number>585-433-1233</Number>
</Contact>
</Customer>
<Customer>...
Subject:Flat File Custom XML conversion help Author:Ivan Pedruzzi Date:29 Sep 2010 12:35 AM
Hi Stanley,
You will need to post process the result, here one of possible solution using XQuery 1.1
Hope this helps
Ivan
<root>{
for tumbling window $items in /root/*
start $start when $start/self::Customer
end next $next when $next[self::Customer]
return
<customer>{
$start/*,
<Contacts>{
subsequence($items, 2)
}</Contacts>
}</customer>
}</root>
Subject:Flat File Custom XML conversion help Author:Stanley Bowling Date:29 Sep 2010 09:34 AM
Ivan,
Thanks for your quick reply. Your xquery does give the right results, however there is one more tweak I need. The xquery fills the contacts based on all items from subsequence($items, 2), however there may be a <note> or <comment> mixed in. Let me show this in an example.
Subject:Flat File Custom XML conversion help Author:Ivan Pedruzzi Date:01 Oct 2010 01:17 AM
Assuming that you want comment and note inside customer
<root>{
for tumbling window $items in /root/*
start $start when $start/self::Customer
end next $next when $next[self::Customer]
return
<customer>{
$start/*,
subsequence($items, 2)[local-name()!='Contact'],
<Contacts>{
subsequence($items, 2)[local-name()='Contact']
}</Contacts>
}</customer>
}</root>