2014-01-06 5 views
2

Я хочу иметь возможность получить значение из пары ключ/значение, содержащейся в файле конфигурации XML, с использованием C# .NET.Загрузка и извлечение пар ключ/значение из файла конфигурации XML

например.

<add key="ConnectionString" value="whatever"/> 

Я отвечаю на свой вопрос здесь, но я заинтересован в том, чтобы альтернативные варианты для загрузки и извлечение значения из пары ключей/значений из XML - может быть, есть более простой или более лаконичный метод?

+0

Вы не слышали о 'System.Configuration' имен и класса' ConfigurationManager'? –

+0

Вы пытаетесь получить значок [Self-Learner] (http://stackoverflow.com/help/badges/14/self-learner)? :-) –

+0

@RuiJarimba Никогда не слышал об этом, но хорошо учиться :) –

ответ

2

ConfigurationManager Предоставляет доступ к файлам конфигурации для клиентских приложений. Вы можете получить пару ключ/значение с помощью создания пользовательских разделов и используя GetSection метод

<MyDictionary> 
     <add key="JoinG." value="[email protected]"/> 
     <add key="Brancheau S." value="[email protected]"/> 
     <add key="Cetrulo P." value="[email protected]"/> 
     <add key="Chiu J." value="[email protected]"/> 
     <add key="D'Alessio S." value="[email protected]"/> 

NameValueCollection section = (NameValueCollection)ConfigurationManager.GetSection("MyDictionary"); 

Вы можете объявить строку подключения с помощью ConfigurationManager.ConnectionStrings Property он получает данные ConnectionStringsSection для конфигурации по умолчанию текущего приложения. Вы можете получить доступ к строке подключения в качестве

string conStr = Convert.ToString(ConfigurationManager.ConnectionStrings["connectionStringName"]); 

UPDATE

Для определения Использовать файл настраиваемой конфигурации ExeConfigurationFileMap Class ConfigurationManager.OpenMappedExeConfiguration метод открывает клиент указанный файл конфигурации в качестве объекта system.Configuration.Configuration.

ExeConfigurationFileMap custmConfg = new ExeConfigurationFileMap(); 
custmConfg.ExeConfigFilename = @"d:\test\test.XML"; 
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(custmConfg, ConfigurationUserLevel.None); 

NameValueCollection coll = (NameValueCollection)ConfigurationManager.GetSection("SectionName"); 
+0

Получает ли ConfigurationManager конфигурационный файл по умолчанию для приложения? В моем случае я ищу, чтобы открыть пользовательский файл конфигурации XML, так как это будет работать с помощью ConfigurationManager? Кроме того, я не уверен, что здесь применяется свойство ConnectionStrings, так как моя строка соединения не сохраняется в элементе ASP.NET , и это не входит в мой файл web.config. –

+0

Спасибо за обновление, похоже, что он будет работать красиво. Предоставляет ли ConfigurationManager возможность внесения изменений в конфигурацию? Если да, то являются ли изменения в физическом файле или существуют они только на экземпляре сервера или сеанса веб-приложения? –

+1

@CiaranGallagher BTW хороший вопрос, я думаю, эта ссылка предоставит вам лучший ответ http://stackoverflow.com/questions/4216809/configurationmanager-doesnt-save-settings –

0

Получить конфигурационный файл, который в моем случае содержится в корне моего приложения сервера ASP.NET:

var doc = XDocument.Load(Server.MapPath("~") + "\\MyConfigFile.config"); 

Получить пары ключ/значение с помощью LINQ (в ниже LINQ запроса мы первые ищу потомок «добавить» элементы, то мы ищем первый узел, который имеет «ключ» атрибут, соответствующий «ConnectionString», то мы получаем значение атрибута «значения»):

var connectionString = doc.Descendants("add") 
    .First(node => (string)node.Attribute("key") == "ConnectionString") 
    .Attribute("value").Value; 

Получить значение ключа, указанного в квадратных скобках:

var connectionString = parameters["ConnectionString"]; 

Класс XDocument также содержит методы для обновления и сохранения изменений в физическом файле.

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