2013-04-08 111 views
0

我正在尝试将XML文件解析为字典。 问题是我在网上找到的所有解决方案都显示了如何通过搜索名称元素来完成此操作。我的应用程序名称元素本身就是我想要搜索的内容。将xml解析为字典

<?xml version="1.0" encoding="UTF-8"?> 
    <calibration> 
     <ZoomLevel 250="0.0100502512562814" /> 
     <ZoomLevel 251="0.0100502512562814" /> 
     <ZoomLevel 252="0.0100502512562814" /> 
     <ZoomLevel 253="0.0100502512562814" /> 
     <ZoomLevel 254="0.0100502512562814" /> 
     <ZoomLevel 255="0.0100502512562814" /> 
     <ZoomLevel 256="0.0100502512562814" /> 
     <ZoomLevel 257="0.0100502512562814" /> 
</calibration> 

我期待删除键“250,251 etc”和值并创建一个字典。

很抱歉,如果这是一个愚蠢的要求,但即时通讯新的C#和IM挣扎配发本

+0

您的XML以无效开头 - 250不是有效的属性名称。 (你还需要清楚一个属性和一个元素之间的差别,这里的*元素*是'ZoomLevel'; *属性*是'250 =“...”'部分)。 – 2013-04-08 16:20:04

+0

删除键?你能举一个关于字典中的关键值对的例子吗? – Justin 2013-04-08 16:20:17

回答

3

不幸的是,你的XML是不是一个有效的。属性名称不能从数字开始。

而是要说明如何在XML是有效的它可以做,让我们假装它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
    <calibration> 
     <ZoomLevel _250="0.0100502512562814" /> 
     <ZoomLevel _251="0.0100502512562814" /> 
     <ZoomLevel _252="0.0100502512562814" /> 
     <ZoomLevel _253="0.0100502512562814" /> 
     <ZoomLevel _254="0.0100502512562814" /> 
     <ZoomLevel _255="0.0100502512562814" /> 
     <ZoomLevel _256="0.0100502512562814" /> 
     <ZoomLevel _257="0.0100502512562814" /> 
</calibration> 

通知_之前每个属性名称。你可以使用Dictionary<int, decimal>以下的LINQ to XML查询:

var xDoc = XDocument.Load("Input.txt"); 

var dict = xDoc.Root.Elements("ZoomLevel") 
        .Select(x => x.Attributes().First()) 
        .ToDictionary(a => int.Parse(a.Name.LocalName.Substring(1)), a => (decimal)a); 

a.Name.LocalName.Substring(1)跳过第一characted - _ - 从属性名称。