XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Adam McCormickSubject: Merge Multiple Files While Checking For Duplicates
Author: Adam McCormick
Date: 20 Jul 2009 08:15 PM
Ok here's the situation; I have multiple xml files that I need to merge into one compiled xml file. The files look something like this:
Note that I only show 3 files but there can be, and are, many more

data1.xml
<report name="report1">
<items name="items1">
<item name="item-one" data="0" />
<item name="item-two" data="2" />
</items>
</report>

data2.xml
<report name="report1">
<items name="items1">
<item name="item-one" data="0" />
<item name="item-two" data="2" />
<item name="item-three" data="7" />
</items>
</report>

data3.xml
<report name="report1">
<items name="items1">
<item name="item-one" data="8" />
<item name="item-two" data="8" />
<item name="item-three" data="9" />
</items>
</report>
After merging these docs I would like to have a result like this:

result.xml
<data>
<items name="items1">
<item name="item1">
<day number="1" value="0" />
<day number="2" value="0" />
<day number="3" value="8" />
</item>
<item name="item2">
<day number="1" value="2">
<day number="2" value="2">
<day number="3" value="8" />
</item>
<item name="item3">
<day number="1" value="0(possibly n/a or nothing it doesn't matter)">
<day number="2" value="7">
<day number="3" value="9" />
</item>
</items>
</data>

I created a master file that lists the paths to all the data files. The problem is I can't just go through every file and compare the current item to all the files and get its data becuase if items in some other file don't appear in file 1 I will never know because I'll never search for them. I created a small test xsl that seemed to almost (stressing almost) solve my problem:

masterfile.xsl
<xsl:template match="/">
<xsl:apply-templates select="document(files/file[1]/@name)/report/items" />
</xsl:template>

<xsl:template match="items">
<xsl:variable name="combined" select="document('data1.xml')/report/items/item | document('data2.xml')/report/items/item[not(@name = document('data1.xml')/report/items/item/@name)]" />

<xsl:apply-templates select="$combined" />

</xsl:template>

<xsl:template match="item">
<xsl:variable name="currentname" select="@name" />
<xsl:value-of select="$currentname" />
<br />
<xsl:for-each select="document('masterfilelist.xml')/files/file">
Day:
<xsl:variable name="itemdata" select="document(@name)/report/items['items1']/item[@name=$currentname]/@data" />
<xsl:value-of select="$itemdata" />
<br />
</xsl:for-each>
<br />
</xsl:template>
</xsl:transform>

Please excuse me if it's a complete disaster and makes alot of you cringe but I've only been at this xsl stuff for a week now.

The output from this style sheet shows me this:
item-one
Day: 0
Day: 0
Day: 8

item-two
Day: 2
Day: 2
Day: 8

item-three
Day:
Day: 7
Day: 9

This is soooo close (unless I'm duping myself). The major problem is it only works with 2 files. I need to able to recurse the logic in the select for the combine variable, so that in the end its been combined with all files but I'm at a complete loss.

Please, any help would very very appreciated!

Thanks you everyone!

Posttop
Tony LavinioSubject: Merge Multiple Files While Checking For Duplicates
Author: Tony Lavinio
Date: 10 Aug 2009 03:59 PM
Which version of Stylus Studio, and which XSLT engine are you using?

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.