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 :
Doordat in het XML bestand niet ieder record gelijk is , krijg ikCode:
<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>
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?Code:76066699,BROWARD,MOTORSPORTS - WPB,
76071027,,MOTORSPORTS OF FT LAUDERDALE LLC,
76066987,BROWARD,MOTORSPORTS - Davie,
Gr,
Fonzie