From: Jackson420 on

Hi

I have a question regarding joining xml files on a key which is present in
all file, following is my code

docFTR is of type XDocument
xdList is List(Of XDocument)
Dim doc = From x In docFTR.Descendants("Data") From i In xdList.GetRange(0,
1) Join d In xdList(0).Descendants("Data") On x.Descendants("Guid").Value
Equals d.Descendants("Guid").Value

i need to programmatically replace xdList(0) with the current XDcoument
which comes from "From i in xdList.getRange(0,2)"

GetRange(0, could be 2 to 10)

Any help is welcome

TIA
Jacko



From: Martin Honnen on
Jackson420 wrote:
> Hi
>
> I have a question regarding joining xml files on a key which is present in
> all file, following is my code
>
> docFTR is of type XDocument
> xdList is List(Of XDocument)
> Dim doc = From x In docFTR.Descendants("Data") From i In xdList.GetRange(0,
> 1) Join d In xdList(0).Descendants("Data") On x.Descendants("Guid").Value
> Equals d.Descendants("Guid").Value
>
> i need to programmatically replace xdList(0) with the current XDcoument
> which comes from "From i in xdList.getRange(0,2)"
>
> GetRange(0, could be 2 to 10)

Join d in i.Descendants("Data")
should do but that sounds too obvious maybe.

If that does not help then consider to post some sample data, at least I
am not good at writing queries without seeing some sample data.

--

Martin Honnen --- MVP Data Platform Development
http://msmvps.com/blogs/martin_honnen/
From: Jackson420 on
Here is a sample data of 1 file, you may make 3 more of the same and try to
join them on Guid and create an xml file

<?xml version="1.0" encoding="utf-8"?>
<ColumnData>
<Data>
<Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
<Data>Sales org#</Data>
</Data>
<Data>
<Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
<Data>G146</Data>
</Data>
</ColumnData


Note: the XDocument must not be hard coded in the command

TIA
Jacko

"Martin Honnen" <mahotrash(a)yahoo.de> wrote in message
news:uwBnVkGQLHA.456(a)TK2MSFTNGP06.phx.gbl...
> Jackson420 wrote:
>> Hi
>>
>> I have a question regarding joining xml files on a key which is present
>> in all file, following is my code
>>
>> docFTR is of type XDocument
>> xdList is List(Of XDocument)
>> Dim doc = From x In docFTR.Descendants("Data") From i In
>> xdList.GetRange(0, 1) Join d In xdList(0).Descendants("Data") On
>> x.Descendants("Guid").Value Equals d.Descendants("Guid").Value
>>
>> i need to programmatically replace xdList(0) with the current XDcoument
>> which comes from "From i in xdList.getRange(0,2)"
>>
>> GetRange(0, could be 2 to 10)
>
> Join d in i.Descendants("Data")
> should do but that sounds too obvious maybe.
>
> If that does not help then consider to post some sample data, at least I
> am not good at writing queries without seeing some sample data.
>
> --
>
> Martin Honnen --- MVP Data Platform Development
> http://msmvps.com/blogs/martin_honnen/


From: Martin Honnen on
Jackson420 wrote:
> Here is a sample data of 1 file, you may make 3 more of the same and try to
> join them on Guid and create an xml file
>
> <?xml version="1.0" encoding="utf-8"?>
> <ColumnData>
> <Data>
> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
> <Data>Sales org#</Data>
> </Data>
> <Data>
> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
> <Data>G146</Data>
> </Data>
> </ColumnData

Here is some sample code processing a List(Of XDocument) of the above
structure and creating a merged document:

Dim doc1 As XDocument = <?xml version="1.0" encoding="utf-8"?>
<ColumnData>
<Data>

<Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
<Data>Sales org #1</Data>
</Data>
<Data>

<Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
<Data>G146</Data>
</Data>
</ColumnData>

Dim doc2 As XDocument = <?xml version="1.0" encoding="utf-8"?>
<ColumnData>
<Data>

<Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
<Data>Sales org #2</Data>
</Data>
<Data>

<Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
<Data>G147</Data>
</Data>
</ColumnData>

Dim doc3 As XDocument = <?xml version="1.0" encoding="utf-8"?>
<ColumnData>
<Data>

<Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
<Data>Sales org #3</Data>
</Data>
</ColumnData>

Dim doc4 As XDocument = <?xml version="1.0" encoding="utf-8"?>
<ColumnData>
<Data>

<Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
<Data>G148</Data>
</Data>
</ColumnData>

Dim docs As New List(Of XDocument)()
docs.Add(doc1)
docs.Add(doc2)
docs.Add(doc3)
docs.Add(doc4)

Dim mergedDoc As XDocument = New XDocument( _
New XElement(doc1.Root.Name, _
From data In docs.<ColumnData>.<Data> _
Group data By guid = data.<Guid>.Value Into G =
Group _
Select New XElement("Data", G(0).<Guid>, G.<Data>)))

mergedDoc.Save(Console.Out)

Output is as follows:

<ColumnData>
<Data>
<Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
<Data>Sales org #1</Data>
<Data>Sales org #2</Data>
<Data>Sales org #3</Data>
</Data>
<Data>
<Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
<Data>G146</Data>
<Data>G147</Data>
<Data>G148</Data>
</Data>
</ColumnData>

Is that what you want? Or how should the merged document look exactly?


--

Martin Honnen --- MVP Data Platform Development
http://msmvps.com/blogs/martin_honnen/
From: Jackson420 on
Excellent job - on the dot

MANY THANKS
Jacko


"Martin Honnen" <mahotrash(a)yahoo.de> wrote in message
news:uODD9eIQLHA.4988(a)TK2MSFTNGP04.phx.gbl...
> Jackson420 wrote:
>> Here is a sample data of 1 file, you may make 3 more of the same and try
>> to join them on Guid and create an xml file
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <ColumnData>
>> <Data>
>> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
>> <Data>Sales org#</Data>
>> </Data>
>> <Data>
>> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
>> <Data>G146</Data>
>> </Data>
>> </ColumnData
>
> Here is some sample code processing a List(Of XDocument) of the above
> structure and creating a merged document:
>
> Dim doc1 As XDocument = <?xml version="1.0" encoding="utf-8"?>
> <ColumnData>
> <Data>
>
> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
> <Data>Sales org #1</Data>
> </Data>
> <Data>
>
> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
> <Data>G146</Data>
> </Data>
> </ColumnData>
>
> Dim doc2 As XDocument = <?xml version="1.0" encoding="utf-8"?>
> <ColumnData>
> <Data>
>
> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
> <Data>Sales org #2</Data>
> </Data>
> <Data>
>
> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
> <Data>G147</Data>
> </Data>
> </ColumnData>
>
> Dim doc3 As XDocument = <?xml version="1.0" encoding="utf-8"?>
> <ColumnData>
> <Data>
>
> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
> <Data>Sales org #3</Data>
> </Data>
> </ColumnData>
>
> Dim doc4 As XDocument = <?xml version="1.0" encoding="utf-8"?>
> <ColumnData>
> <Data>
>
> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
> <Data>G148</Data>
> </Data>
> </ColumnData>
>
> Dim docs As New List(Of XDocument)()
> docs.Add(doc1)
> docs.Add(doc2)
> docs.Add(doc3)
> docs.Add(doc4)
>
> Dim mergedDoc As XDocument = New XDocument( _
> New XElement(doc1.Root.Name, _
> From data In docs.<ColumnData>.<Data> _
> Group data By guid = data.<Guid>.Value Into G = Group
> _
> Select New XElement("Data", G(0).<Guid>, G.<Data>)))
>
> mergedDoc.Save(Console.Out)
>
> Output is as follows:
>
> <ColumnData>
> <Data>
> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid>
> <Data>Sales org #1</Data>
> <Data>Sales org #2</Data>
> <Data>Sales org #3</Data>
> </Data>
> <Data>
> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid>
> <Data>G146</Data>
> <Data>G147</Data>
> <Data>G148</Data>
> </Data>
> </ColumnData>
>
> Is that what you want? Or how should the merged document look exactly?
>
>
> --
>
> Martin Honnen --- MVP Data Platform Development
> http://msmvps.com/blogs/martin_honnen/