1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| string path = @"E:\tmp\data.xml";
var doc = XDocument.Load(path);
var groupedRecords =
from corps in doc.Root.Elements("Corps_outbound")
let record = corps.Elements().ToDictionary(e => e.Name.LocalName, e => e.Value)
group record by new
{
Type_analyseur = record["Type_analyseur"],
Evt = record["Evt"],
DateEffet = record["DateEffet"],
CodePtMesur = record["CodePtMesur"],
};
var mergedRecords = groupedRecords.Select(MergeRecords).ToArray();
var mergedElements =
from record in mergedRecords
select new XElement(
"Corps_outbound",
record.Select(kvp => new XElement(kvp.Key, kvp.Value)));
var header = doc.Root.Element("Header_outbound");
var footer = doc.Root.Element("Footer_outbound");
doc = new XDocument(
new XElement("Outbound",
header,
mergedElements,
footer));
...
static Dictionary<string, string> MergeRecords(IEnumerable<Dictionary<string, string>> records)
{
Dictionary<string, string> result = null;
foreach (var record in records)
{
if (result == null)
{
result = record;
}
else
{
foreach (var key in record.Keys)
{
if (!result.ContainsKey(key) || string.IsNullOrEmpty(result[key]))
{
result[key] = record[key];
}
}
}
}
return result;
} |
Partager