Subject:Tab delemited Flat file to XML Author:Jolene Meyer Date:29 Aug 2008 02:28 PM Originally Posted: 29 Aug 2008 10:44 AM
I have a flat file that has a "Header" and "Detail" information, there is always one "header" but there could be muliple "detail" lines. How do I get the "tag" to close after the last "detail" line for that header.
Header 123456
Detail 1 EA 500 1.50
Detail 1 EA 10 1.20
Header 456789
Detail 1 EA 5 .50
Header . .. . . . . .
I am also including the xml format I need to create, keep in mind my flat file is very genertic at this time. I am starting small
Subject:Tab delemited Flat file to XML Author:Minollo I. Date:29 Aug 2008 02:40 PM
You are trying to do some positional grouping; XML Converters won't be able to handle that (and they won't be able to let you map to a specific XML Schema), but the combination of XML Converters and DataDirect XQuery surely helps. I haven't tried generating something consistent with your target XML, but the following XQuery fragment might help to get started on that task:
(: Given a Header node, get all the related Details :)
declare function local:getDetails($item) {
let $nextItem := $item/following-sibling::*[local-name()!="Detail"][1]
for $detail in $item/following-sibling::*[local-name()="Detail"]
where if($nextItem) then $detail << $nextItem else true()
return $detail
};
<root> {
for $Header in doc('converter:file:///c:/xmlout.conv?file:///c:/edi856_o.dat')/root/Header
return
<Group>
{$Header}
<Details> {
for $detail in local:getDetails($Header)
return $detail
} </Details>
</Group>
} </root>
Subject:Tab delemited Flat file to XML Author:Jolene Meyer Date:29 Aug 2008 02:44 PM
I am creating the flat file and the XML output. Do you have any suggestion on how I should layout my flatfile. Just keep in mind I will have a header record and many detail lines. It is like an order file, is there an easier way to do this.
Subject:Tab delemited Flat file to XML Author:Minollo I. Date:29 Aug 2008 02:57 PM
You will need a transformation step no matter how your flat file is structured to go from a converterd flat file to the specific XML structure you are looking for.
Using a custom conversion is probably a good idea, as it gives you a chance to name the individual fields in a meaningful way - making downstream transformation work easier. In theory, you could use the generic built-in tab delimited file converter, but that would make your mapping task more difficult in XQuery.
If you are forced to generate a flat file and move from it to XML, I think the custom XML Converter -> XQuery approach is the one that provides you most flexibility.
Subject:Tab delemited Flat file to XML Author:Jolene Meyer Date:29 Aug 2008 03:09 PM
Let me do some playing around and see what I can come up with. Do you think my flat file is OK, or do you have any suggestions on how to make it easier?
Subject:Tab delemited Flat file to XML Author:Minollo I. Date:29 Aug 2008 03:59 PM
If you have full control on the structure of the flat file, you could make life easier for the XQuery-based XML1 to XML2 transformation. You can find attached an alternative flat file format and a custom conversion example that creates a structure grouping headers and details without the need of an XQuery.
Applying an XQuery to the output of this custom conversion (XML1) and generating a different output consistent with a specific schema (XML2) should be relatively easy, and doable mostly through the visual "Mapper" tab in XQuery. Take a look at the short attached video and attached XQuery.
Subject:Tab delemited Flat file to XML Author:Jolene Meyer Date:29 Aug 2008 04:31 PM
Wow, I just watched your video. That is great help.
Now the question is, can I develop that. Crossing my fingers.
My final question before we purchase, and we don't need to get into details right now. But can the process be automated. From the flat file to the final XML output, because we don't want to have to run it manually.
Subject:Tab delemited Flat file to XML Author:Minollo I. Date:29 Aug 2008 04:37 PM
Yes; both XML Converters and DataDirect XQuery expose simple Java interfaces that can be easily used; you can even use Stylus Studio to generate some sample Java code that shows you how to execute an XQuery (XQuery > Generate Java code). You can also perform transformatins through command line utilities if that fits better your deployment model.
And yes, as you can imagine you will need to purchase runtime licences for XML Converters and XQuery to use the components outside the Stylus Studio UI environment.