Comment puis-je charger le XML suivant en utilisant LINQ-to-XML dans un dictionnaire?

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); }