2016-12-24 3 views
0

мне нужно вручную объединить старую User.config с новыми настройками, и теперь я просто хочу, чтобы загрузить старые значения в словарь:Как загрузить пользовательский user.config XML в словарь

<?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> 

Код:

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

Это приводит к node.Attributes [ «название»]. Значение является «настройка» вместо «OpenKey» в первом цикле, а также и значения равны нулю

+0

Можете ли вы дать более полный образец с несколькими настройками? – jdweng

ответ

1

См ниже код. Я предложил два решения. Сначала, если каждый ключ является уникальным и вторым, если для каждого ключа есть несколько значений.

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

     } 
    } 
} 
Смежные вопросы