Без 0x префикс, необходимо определить основу явно, иначе нет никакого способа сказать:
x = int("deadbeef", 16)
С 0x префикс, Python может отличить шестнадцатеричное число и десятичное число автоматически.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Вы должны , определяют 0
как основу для вызова этого предполагающего префикс поведения; исключение второго параметра означает принимать основу 10.)
То, что вы хотите сделать, читайте на Пользовательские разделы конфигурации .
В своем проекте я использую что-то похожее для конфигурации, которую я нашел. Я считаю, что статья была названа последним обработчиком раздела конфигурации, который мне когда-либо понадобится (я не могу найти рабочую ссылку, может быть, кто-то сможет связать ее для меня).
Этот метод продвигает то, что вы хотите сделать, на один шаг дальше и фактически десериализует объект в память. Я просто копирую код из своего проекта, но будет довольно просто сделать шаг назад, если все, что вам нужно, это 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 или сделать все, что вам нужно.
? ????????? ??????????? 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>