Есть ли вспомогательный метод для анализа appSettings-подобного xml? - PullRequest
5 голосов
/ 03 июня 2011

Под appSettings-like я имею в виду следующее:

<appSettings>
    <add key="myKey" value="myValue" />
</appsettings>

В результате получается коллекция значений ключа, к которой я могу получить доступ следующим образом:

string v = config["myKey"];

, но она не обязательно находитсяв app.config, так что у меня есть строка или XmlNode.

NameValueFileSectionHandler.Create метод, очевидно, может выполнять эту работу, но для ввода нужны два объекта, родительский объект, объект configContext объекта, в дополнение к узлу xml, и я не знаю, что им передать.

Ответы [ 4 ]

7 голосов
/ 03 июня 2011

Разобрать строку в словаре, как это,

var xml = XElement.Parse("<appSettings><add key=\"myKey\" value=\"myValue\" /></appSettings>");
var dic = xml.Descendants("add").ToDictionary(x => x.Attribute("key").Value, x => x.Attribute("value").Value);

Вы можете получить такие значения, как

var item = dic["myKey"];

Вы также можете изменить значения в словаре следующим образом:

dic["myKey"] = "new val";

И вы можете преобразовать измененный словарь обратно в XElement, используя этот код,

var newXml = new XElement("appSettings", dic.Select(d => new XElement("add", new XAttribute("key", d.Key), new XAttribute("value", d.Value))));
1 голос
/ 03 июня 2011

Вы можете сделать что-то вроде этого:

Hashtable htResource = new Hashtable();
    XmlDocument document = new XmlDocument();
    document.LoadXml(XmlString);
    foreach (XmlNode node in document.SelectSingleNode("appSettings"))
    {
        if ((node.NodeType != XmlNodeType.Comment) && !htResource.Contains(node.Attributes["name"].Value))
            {
                htResource[node.Attributes["name"].Value] = node.Attributes["value"].Value;
            }
    }

Затем вы можете получить доступ к значениям, используя:

string myValue = htResource["SettingName"].ToString();

Надеюсь, что поможет,

Дейв

0 голосов
/ 03 июня 2011

Я не пробовал это, но я думаю, что код ниже может дать вам то, что вы хотите.

System.Configuration.ConfigurationFileMap fileMap = new System.Configuration.ConfigurationFileMap(yourConfigFileLocation);
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
        var setting = configuration.AppSettings["settingName"];
0 голосов
/ 03 июня 2011

Это на самом деле не «помощник», но фреймворк включает в себя что-то под брендом Configuration API . Это работает внутри файлов конфигурации и преобразует ваш конфигурационный XML в классы. Подробнее смотрите здесь:

http://msdn.microsoft.com/en-us/library/ms178688(v=VS.80).aspx http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

Это всегда образец, который я использую (потому что я никогда не могу вспомнить точную структуру всего этого):

http://haacked.com/archive/2007/03/12/custom-configuration-sections-in-3-easy-steps.aspx

http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx#

Существует также конструктор, который интегрируется с VS:

http://csd.codeplex.com/

Поиск в Google "разделов пользовательской конфигурации C #" также даст вам много результатов.

...