Cod*_*dex 10 .net c# version-control
我试图实现从配置文件中读取节的通用方法.配置文件可能包含"标准"部分或"自定义"部分,如下所示.
<configuration>
<configSections>
<section name="NoteSettings" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<appSettings>
<add key="AutoStart" value="true"/>
<add key="Font" value="Verdana"/>
</appSettings>
<NoteSettings>
<add key="Height" value="100"/>
<add key="Width" value="200"/>
</NoteSettings>
Run Code Online (Sandbox Code Playgroud)
我尝试的方法如下:
private string ReadAllSections()
{
StringBuilder configSettings = new StringBuilder();
Configuration configFile = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
foreach (ConfigurationSection section in configFile.Sections)
{
configSettings.Append(section.SectionInformation.Name);
configSettings.Append(Environment.NewLine);
if (section.GetType() == typeof(DefaultSection))
{
NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.Name) as NameValueCollection;
if (sectionSettings != null)
{
foreach (string key in sectionSettings)
{
configSettings.Append(key);
configSettings.Append(" : ");
configSettings.Append(sectionSettings[key]);
configSettings.Append(Environment.NewLine);
}
}
}
configSettings.Append(Environment.NewLine);
}
return configSettings.ToString();
}
Run Code Online (Sandbox Code Playgroud)
假设所有自定义部分都只有KEY-VALUE
更正/建议欢迎.
谢谢.
由于配置文件是XML文件,因此您可以使用XPath查询执行此任务:
Configuration configFile = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
XmlDocument document = new XmlDocument();
document.Load(configFile.FilePath);
foreach (XmlNode node in document.SelectNodes("//add"))
{
string key = node.SelectSingleNode("@key").Value;
string value = node.SelectSingleNode("@value").Value;
Console.WriteLine("{0} = {1}", key, value);
}
Run Code Online (Sandbox Code Playgroud)
如果需要获取所有{key,value}对,则需要定义XPath查询的三元组:1 - 用于选择具有相似结构的节点的主查询.2,3-用于从第一查询检索的节点中提取键和值节点的查询.在您的情况下,它足以对所有节点进行通用查询,但很容易维护对不同自定义节的支持.