C# 将Xml文件加载到节、键和值集合中

C# 将Xml文件加载到节、键和值集合中,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我们有一个基本上是Xml的设置文件,我们正在为我们正在编写的可插入模块扩展它。基本上,我们希望使用现有的Xml设置,但允许在其上编写扩展方法。长话短说如果我们有这样一个Xml文件: <Settings> <SettingsOne Key1_1="Value1" Key1_2="Value2" /> <SettingsTwo Key2_1="Value1" Key2_2="Value

我们有一个基本上是Xml的设置文件,我们正在为我们正在编写的可插入模块扩展它。基本上,我们希望使用现有的Xml设置,但允许在其上编写扩展方法。长话短说如果我们有这样一个Xml文件:

<Settings>

    <SettingsOne Key1_1="Value1"
                 Key1_2="Value2" />
    <SettingsTwo Key2_1="Value1"
                 Key2_2="Value2" />


</Settings>
其中部分为“设置SONE”,键为“键1_1”,值为“值1”

这是可能的还是我正在走一条黑暗的道路

编辑:

好的,Linq对Xml的建议是救命的,我正试图用XmlSerializer做到这一点!以下是我到目前为止所拥有的,有没有办法将其变成一个单一的选择,而不是像下面这样的两个选择:

var root = XElement.Load(pathToXml);

  var sections = from el in root.Elements()
            select el.Name;

  List<SettingsEntry> settings = new List<SettingsEntry>();

  foreach (var item in sections)
  {
    var attributes = from el in root.Elements(item).Attributes()
                     select new SettingsEntry()
                     {
                       Section = item.LocalName,
                       Key = el.Name.LocalName,
                       Value = el.Value
                     };
    settings.AddRange(attributes);
  }

  return settings;

您可以在一个LINQ查询中这样做:

var attributes = from attribute in root.Elements().Attributes()
                 select new SettingsEntry()
                 {
                   Section = attribute.Parent.Name.LocalName,
                   Key = attribute.Name.LocalName,
                   Value = attribute.Value
                 };
return attributes.ToList();
var xml=@”
"
var root=XDocument.Parse(xml);
var q=root.Elements(“设置”).subjects();
列表设置=(来自root.Elements(“设置”).subjects()中的el)
选择新设置Sentry()
{
Section=el.Name.ToString(),
Key=el.FirstAttribute.Value,
Value=el.lasttribute.Value
}).ToList();

您可能需要稍微使用它来获得您想要的确切对象,但这是朝着正确方向的一个重大推动。

是的,这是绝对可能的-我建议您尝试使用LINQ to XML。考虑从doc.Root.Elements中的元素中查询
。从元素中的属性中查询元素。属性()选择…
,然后如果您有问题,请询问更详细的问题:)显示您有哪些代码,我将帮助您解决问题。付出一点努力,我会帮助你的。谢谢你,乔恩,这真的很有帮助,把我推到了正确的道路上,卡尔文道歉,如果我想出了什么即使是远程工作,我也会把它贴出来,但我完全走错了方向!好的,这比我想到的要好,谢谢。
   var sections = from el in root.Elements()
                 from a in root.Elements(el.Name).Attributes()
                 select new SettingsEntry()
                 {
                   Section = el.Name.LocalName,
                   Key = a.Name.LocalName,
                   Value = a.Value
                 };
var attributes = from attribute in root.Elements().Attributes()
                 select new SettingsEntry()
                 {
                   Section = attribute.Parent.Name.LocalName,
                   Key = attribute.Name.LocalName,
                   Value = attribute.Value
                 };
return attributes.ToList();
 var xml = @"
 <Settings>
   <SettingsOne Key1_1= ""Value1"" Key1_2= ""Value1""></SettingsOne>
   <SettingsTwo Key2_1= ""Value1"" Key2_2= ""Value1""></SettingsTwo>
 </Settings>"

var root = XDocument.Parse(xml);

var q = root.Elements("Settings").Descendants();

List<SettingsEntry> settings = (from el in root.Elements("Settings").Descendants()
                 select new SettingsEntry()
                 {
                   Section = el.Name.ToString(),
                   Key = el.FirstAttribute.Value,
                   Value = el.LastAttribute.Value
                 }).ToList();