0

我正在尝试将 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 等”和值并创建字典。

抱歉,如果这是一个愚蠢的问题,但我对 c# 很陌生,而且我正在为此苦苦挣扎

4

1 回答 1

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)跳过第一个字符 - _- 从属性名称。

于 2013-04-08T16:19:54.890 回答