C# 将Xml文件加载到节、键和值集合中
我们有一个基本上是Xml的设置文件,我们正在为我们正在编写的可插入模块扩展它。基本上,我们希望使用现有的Xml设置,但允许在其上编写扩展方法。长话短说如果我们有这样一个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
<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();