Comment puis-je charger le document XML formaté suivant:
Dans un dictionnaire où la clé est une extension individuelle et la valeur est le type MIME.
Donc, pour cette ligne:
J’aurais les entrées clé-valeur suivantes:
Clé: “.xla” Valeur: “application / vnd.ms-excel”
Clé: “.xlc” Valeur: “application / vnd.ms-excel”
Clé: “.xlm” Valeur: “application / vnd.ms-excel”
Clé: “.xls” Valeur: “application / vnd.ms-excel”
Clé: “.xlt” Valeur: “application / vnd.ms-excel”
Je suis relativement nouveau dans le secteur LINQ-To-XML.
Je sais que je devrais charger le document dans un XElement comme:
XElement settingsDoc = XElement.Load("Settings.xml");
Cependant, comment puis-je sélectionner toutes les entrées “MimeType”?
Quelque chose comme:
var dictionary = (from element in settingsDoc.Descendants("MimeType") from extension in element.Atsortingbute("Extensions") .Value.Split(';') select new { Type = element.Atsortingbute("Type").Value, Extension = extension }) .ToDictionary(x => x.Extension, x => x.Type);
Ceci est ma solution.
XElement el = XElement.Parse(txt); var mimeTypes = el.Element("MimeTypes").Elements("MimeType"); var transFormed = mimeTypes.Select(x => new { Type = x.Atsortingbute("Type").Value, Extensions = x.Atsortingbute("Extensions").Value.Split(';') } ); Dictionary mimeDict = new Dictionary(); foreach (var mimeType in transFormed) { foreach (ssortingng ext in mimeType.Extensions) { if (mimeDict.ContainsKey(ext)) mimeDict[ext] = mimeType.Type; else mimeDict.Add(ext, mimeType.Type); } }
Ok, après avoir regardé le code de Jonh … voici ma deuxième solution 🙂
XElement el = XElement.Parse(txt); var mimeTypes = el.Element("MimeTypes").Elements("MimeType"); var dictionary = mimeTypes.SelectMany(x => x.Atsortingbute("Extensions").Value.Split(';').Select( ext => new { Key = ext, Value = x.Atsortingbute("Type").Value } ) ).ToDictionary( x => x.Key, y => y.Value);
Voici ma consortingbution.
Dictionary dic = new Dictionary(); foreach (XElement element in settingsDoc.Descendants("MimeType")) { ssortingng val = element.Atsortingbute("Type").Value; foreach (ssortingng str in element.Atsortingbute("Extensions").Value.Split(';')) if (!dic.ContainsKey(str)) dic.Add(str, val); }