Ik maak gebruik van onderstaande
C# Code:
static void GenerateCsvFromXml(string xmlString, string resultFileName, bool isTabDelimited)
{
XDocument xDoc = XDocument.Parse(xmlString);
string delimiter = "\t";
// Get title row
var titlesList = xDoc.Root
.Elements()
.First()
.Elements()
.Select(s => s.Name.LocalName)
.ToList();
var masterValuesList = xDoc.Root
.Elements()
.Select(e => e
.Elements()
.Select(c => c.Value)
.ToList())
.ToList();
// Add titles as first row in master values list
masterValuesList.Insert(0, titlesList);
// Write the file
using (var fs = new FileStream(resultFileName, FileMode.Create))
using (var sw = new StreamWriter(fs))
{
foreach (var values in masterValuesList)
{
string line = string.Empty;
foreach (var value in values)
{
line += value;
if (titlesList.IndexOf(value) < titlesList.Count - 1)
{
line += delimiter;
}
}
sw.WriteLine(line);
}
}
}
Dit werkt goed bij een XML bestand waarvan de records gelijk zijn. Nu heb ik alleen een XML als volgt :
Code:
<ArrayOfDealer xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Dealer>
<DealerNumber/>
<DealershipName>BROWARD MOTORSPORTS - WPB</DealershipName>
</Dealer>
<Dealer>
<Cmf>76071027</Cmf>
<DealerNumber/>
<DealershipName>BROWARD MOTORSPORTS OF FT LAUDERDALE LLC</DealershipName>
</Dealer>
<Dealer>
<Cmf>76014750</Cmf>
<DealerNumber/>
<DealershipName>Jet Ski of Miami</DealershipName>
</Dealer>
<Dealer>
<Cmf>76066987</Cmf>
<DealershipName>BROWARD MOTORSPORTS - Davie</DealershipName>
</Dealer>
</ArrayOfDealer>
Doordat in het XML bestand niet ieder record gelijk is , krijg ik
Code:
76066699,BROWARD,MOTORSPORTS - WPB,
76071027,MOTORSPORTS OF FT LAUDERDALE LLC,
76066987,BROWARD,MOTORSPORTS - Davie,
i.p.v.
Code:
76066699,BROWARD,MOTORSPORTS - WPB,
76071027,,MOTORSPORTS OF FT LAUDERDALE LLC,
76066987,BROWARD,MOTORSPORTS - Davie,
Weet iemand hoe ik masterValuesList kan aanpassen zodat deze altijd de zelfde aantal velden als titlesLis krijgt?
Gr,
Fonzie
Bookmarks