如果名称未知,请阅读Config中的部分?

时间:2013-01-11 22:26:59

标签: c# .net xml configuration

我有一个简单的程序可以让用户将一个部分添加到自定义配置文件中,它会有比设置更多的设置。我用一个包含所有配置的列表填充datagridview。我的问题是,填充列表框的方法不会知道用户可能添加的部分的所有名称,我正在尝试动态。有没有一种简单的方法来循环这些部分并得到他们的名字?或者我是否必须制作一个部分,集合和元素才能实现这一目标?

感谢。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <configSections>
    <section name="Jason" type="SQLQueryOutput.SQLQueryOutputConfigSection, SQLQueryOutput, Version=1.0.0.0, Culture=neutral, PublicKeyToken=760d257b40400289" />
    <section name="Steve" type="SQLQueryOutput.SQLQueryOutputConfigSection, SQLQueryOutput, Version=1.0.0.0, Culture=neutral, PublicKeyToken=760d257b40400289" />
</configSections>
    <Jason OutputFilePath="C:\temp\jason.txt" />
    <Steve OutputFilePath="C:\temp\steve.txt" />
</configuration>

2 个答案:

答案 0 :(得分:1)

如何使用Linq To Xml来解析配置文件。例如,

var xDoc = XDocument.Load(configFile);
var sections = xDoc.XPathSelectElements("//configSections/section")
                    .Select(x=>x.Attributes().ToDictionary(a=>a.Name,a=>a.Value))
                    .ToList();

var name = sections[0]["name"];

var outputFilePaths = xDoc.Root.Elements()
       .Where(d => d.Name.LocalName != "configSections")
       .ToDictionary(e => e.Name.LocalName, e => e.Attribute("OutputFilePath").Value);

答案 1 :(得分:0)

实际上,您的configSections元素也可以包含sectionGroup个元素。使用Linq to Xml

XDocument xdoc = XDocument.Load(config_file_path);
var names =  xdoc.Root.Element("configSections")
                 .Descendants("section") // selects also sectionGroup/section
                 .Select(s => (string)s.Attribute("name"));