C# 使用LINQ将XML解析为字典
我有一个配置文件,例如:C# 使用LINQ将XML解析为字典,c#,linq,C#,Linq,我有一个配置文件,例如: <ConfigurationFile> <Config name="some.configuration.setting" value="some.configuration.value"/> <Config name="some.configuration.setting2" value="some.configuration.value2"/> ... </ConfigurationFile>
<ConfigurationFile>
<Config name="some.configuration.setting" value="some.configuration.value"/>
<Config name="some.configuration.setting2" value="some.configuration.value2"/>
...
</ConfigurationFile>
...
我正在尝试将其读入XML并将其转换为字典。我试着这样编写一些东西,但显然是错误的,因为它无法编译
Dictionary<string, string> configDictionary = (from configDatum in xmlDocument.Descendants("Config")
select new
{
Name = configDatum.Attribute("name").Value,
Value = configDatum.Attribute("value").Value,
}).ToDictionary<string, string>(Something shoudl go here...?);
Dictionary configDictionary=(来自xmlDocument.subjects(“Config”)中的configDatum)
选择新的
{
Name=configDatum.Attribute(“Name”).Value,
Value=configDatum.Attribute(“Value”).Value,
}).ToDictionary(应该放在这里的东西…?);
如果有人能告诉我如何让这个工作,这将是非常有帮助的。当然,我可以随时阅读它您对
ToDictionary
的调用需要一个键和值选择器。从你拥有的开始,它可以是
var dictionary = yourQuery.ToDictionary(item => item.Name, item => item.Value);
要给出更详细的答案,您可以完全按照您在问题中所写的那样使用
ToDictionary
。在缺少的部分中,需要指定“键选择器”和“值选择器”。这两个函数告诉ToDictionary
方法要转换的对象的哪个部分是键,哪个是值。您已经将这两个文件提取到匿名类型中,因此可以编写:
var configDictionary =
(from configDatum in xmlDocument.Descendants("Config")
select new {
Name = configDatum.Attribute("name").Value,
Value = configDatum.Attribute("value").Value,
}).ToDictionary(o => o.Name, o => o.Value);
注意,我删除了泛型类型参数规范。C#编译器会自动计算(我们使用的是一个)。但是,您可以避免使用匿名类型-在上面的版本中,您只需创建它来临时存储值。最简单的版本是:
var configDictionary =
xmlDocument.Descendants("Config").ToDictionary(
datum => datum.Attribute("name").Value,
datum => datum.Attribute("value").Value );
不需要查询,因为您只是在进行投影。将投影移动到调用
ToDictionary()
:
对不起,我不太清楚。这个代码会去哪里?
var configDictionary = xmlDocument.Descendants("Config")
.ToDictionary(e => e.Attribute("name").Value,
e => e.Attribute("value").Value);