Как Считать Пользовательский XML из app.config?

Без 0x префикс, необходимо определить основу явно, иначе нет никакого способа сказать:

x = int("deadbeef", 16)

С 0x префикс, Python может отличить шестнадцатеричное число и десятичное число автоматически.

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

(Вы должны , определяют 0 как основу для вызова этого предполагающего префикс поведения; исключение второго параметра означает принимать основу 10.)

9
задан George Stocker 16 September 2009 в 17:30
поделиться

3 ответа

То, что вы хотите сделать, читайте на Пользовательские разделы конфигурации .

5
ответ дан 4 December 2019 в 09:14
поделиться

В своем проекте я использую что-то похожее для конфигурации, которую я нашел. Я считаю, что статья была названа последним обработчиком раздела конфигурации, который мне когда-либо понадобится (я не могу найти рабочую ссылку, может быть, кто-то сможет связать ее для меня).

Этот метод продвигает то, что вы хотите сделать, на один шаг дальше и фактически десериализует объект в память. Я просто копирую код из своего проекта, но будет довольно просто сделать шаг назад, если все, что вам нужно, это XML.

Во-первых, вам нужно определить класс, который обрабатывает ваши параметры конфигурации.

using System;
using System.Configuration;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.XPath;


namespace Ariel.config
{
    class XmlSerializerSectionHandler : IConfigurationSectionHandler
    {

        #region IConfigurationSectionHandler Members

        public object Create(object parent, object configContext, XmlNode section)
        {
            XPathNavigator nav = section.CreateNavigator();
            string typename = (string)nav.Evaluate("string(@type)");
            Type t = Type.GetType(typename);
            XmlSerializer ser = new XmlSerializer(t);
            return ser.Deserialize(new XmlNodeReader(section));
        }

        #endregion
    }
}

Теперь , скажем, вы хотите загрузить раздел конфигурации ... очень просто, приведите его к типу объекта, который вы ожидаете от XML-сериализации, и передайте нужный раздел (в данном случае SearchSettings .

try
{
  config = (Eagle.Search.SearchSettings)ConfigurationSettings.GetConfig("SearchSettings");
}
catch (System.Configuration.ConfigurationException ex)
{
  syslog.FatalException("Loading search configuration failed, you likely have an error", ex);
  return;
}

Теперь, все, что вам нужно, это ваш файл App.config. Я решил разделить свой на отдельные файлы (по 1 файлу на раздел), чтобы упростить управление конфигурацией. Вы определяете раздел, присваиваете ему имя и определяете тип (как бы вы ни называли класс, перечисленный выше) и имя сборки.

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="SearchSettings" type="Ariel.config.XmlSerializerSectionHandler, Ariel"/>
  </configSections>
  <SearchSettings configSource="Config\Search.config" />
</configuration>

Теперь все, что осталось, - это файл конфигурации, который будет деактивирован. -сериализованный. Здесь важно то, что блок соответствует имени вашего раздела, а вашим типом является любой объект, в который он должен де-сериализоваться, и имя сборки.

<?xml version="1.0" encoding="utf-8" ?>
<SearchSettings type="Eagle.Search.SearchSettings, Eagle">
  <NumThreads>4</NumThreads>
</SearchSettings>

Если вам нужен только чистый необработанный XML, все, что вам нужно сделать, это изменить Объект, который обрабатывает раздел, чтобы вернуть XML или сделать все, что вам нужно.

дайте ему имя и определите тип (как бы вы ни называли класс, перечисленный выше) и имя сборки.

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="SearchSettings" type="Ariel.config.XmlSerializerSectionHandler, Ariel"/>
  </configSections>
  <SearchSettings configSource="Config\Search.config" />
</configuration>

Теперь все, что осталось, - это файл конфигурации, который нужно десериализовать. Здесь важно то, что блок соответствует имени вашего раздела, а вашим типом является любой объект, в который он должен десериализоваться, и имя сборки.

<?xml version="1.0" encoding="utf-8" ?>
<SearchSettings type="Eagle.Search.SearchSettings, Eagle">
  <NumThreads>4</NumThreads>
</SearchSettings>

Если вам нужен только чистый необработанный XML, все, что вам нужно сделать, это изменить Объект, который обрабатывает раздел, чтобы вернуть XML или сделать все, что вам нужно.

дайте ему имя и определите тип (как бы вы ни называли класс, указанный выше) и имя сборки.

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="SearchSettings" type="Ariel.config.XmlSerializerSectionHandler, Ariel"/>
  </configSections>
  <SearchSettings configSource="Config\Search.config" />
</configuration>

Теперь все, что осталось, - это файл конфигурации, который нужно десериализовать. Здесь важно то, что блок соответствует имени вашего раздела, а вашим типом является любой объект, в который он должен де-сериализоваться, и имя сборки.

<?xml version="1.0" encoding="utf-8" ?>
<SearchSettings type="Eagle.Search.SearchSettings, Eagle">
  <NumThreads>4</NumThreads>
</SearchSettings>

Если вам нужен только чистый необработанный XML, все, что вам нужно сделать, это изменить Объект, который обрабатывает раздел, чтобы вернуть XML или сделать все, что вам нужно.

14
ответ дан 4 December 2019 в 09:14
поделиться

? ????????? ??????????? xml ? ???? config.app. ???? ? ???????? ?? ???? app.XSD. ???? XSD ???????? ????? ????? config.app. ????? ???? XSD ????? ????????????? ? ????? vb ??? ???? ?????? C # ? ??????? ' xsd.exe '. ?????? ???, ??? ??? ????? ???????, ??? ??????????????? ???? ???????????? ? ?????.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="CustomConfig" type="Object" />
    </configSections>

    <CustomConfig>
        <ActiveEnvironment>QAS</ActiveEnvironment>
        <Environments>
            <Environment name ="PRD" log="Y">
            </Environment>
            <Environment name ="QAS" log="N">
            </Environment>
            <Environment name ="DEV" log="Y">
            </Environment>
        </Environments>
    </CustomConfig>

</configuration>
0
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: