2016-12-24 4 views
0

ich manuell müssen geladen werden, um ältere user.config mit neuen Einstellungen verschmelzen, und ich möchte jetzt nur alte Werte in ein Wörterbuch laden:Wie benutzerdefinierte user.config xml in ein Wörterbuch

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <userSettings> 
     <myprog.Properties.Settings> 
      <setting name="openkey" serializeAs="String"> 
       <value>o</value> 
      </setting> 
      <setting name="licenseAccepted" serializeAs="String"> 
       <value>True</value> 
      </setting> 

Code:

Dictionary<string, string> myDictionary = new Dictionary<string, string>(); 
XmlDocument document = new XmlDocument(); 
document.Load(OlderSettingLocation); 
XmlNodeList s = document.SelectNodes("/configuration/userSettings/myprog.Properties.Settings/setting"); 
      foreach (XmlNode node in s) 
      { 
       myDictionary.Add(node.Attributes["name"].Value, node.Attributes["value"].Value); 
      } 

Dies führt zu node.Attributes [ "name"]. Wert wird anstelle von "OpenKey" in der ersten Schleife "Einstellung", und und Werte sind null

+0

Können Sie ein vollständigeres Beispiel mit mehreren Einstellungen geben? – jdweng

Antwort

1

Siehe Code unten. Ich habe zwei Lösungen zur Verfügung gestellt. Erstens, wenn jeder Schlüssel eindeutig ist, und zweitens, wenn für jeden Schlüssel mehrere Werte vorhanden sind.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 

      XDocument doc = XDocument.Load(FILENAME); 

      Dictionary<string, string> dict1 = doc.Descendants("setting").Select(x => new { 
       name = (string)x.Attribute("name"), 
       value = (string)x.Element("value") 
      }).GroupBy(x => x.name, y => y.value) 
      .ToDictionary(x => x.Key, y => y.FirstOrDefault()); 


      Dictionary<string, List<string>> dict2 = doc.Descendants("setting").Select(x => new { 
       name = (string)x.Attribute("name"), 
       value = (string)x.Element("value") 
      }).GroupBy(x => x.name, y => y.value) 
      .ToDictionary(x => x.Key, y => y.ToList()); 

     } 
    } 
} 
Verwandte Themen