使用LINQ从XML读取整数

时间:2013-12-30 14:26:58

标签: c# xml linq linq-to-xml

我从这里获得了这个xml文件,我希望从

获得金额
<data>
  <money>300</money>
  <lives>10</lives>
  <start>
    <x>10</x>
    <y>-1</y>
    <direction>down</direction>
  </start>
  <waves>
    <wave>
      <slimes>5</slimes>
      <healthPerSlime>60</healthPerSlime>
      <money>25</money>
    </wave>
    <wave>
      <slimes>10</slimes>
      <healthPerSlime>80</healthPerSlime>
      <money>30</money>
    </wave>
  </waves>
</data>

我试过两种方式:

money = int.Parse(xmlDoc.Elements().Select(x => x.Element("money").Value).ToString());

money = int.Parse((from element in xmlDoc.Descendants("money")
                              select element.Value).ToString());

但我一直收到FormatException&#34;输入字符串的格式不正确。&#34;

有人可以告诉我我做错了什么。

3 个答案:

答案 0 :(得分:3)

应该是

xmlDoc.Elements()
      .Select(x => int.Parse(x.Element("money").Value))
      .Sum();

答案 1 :(得分:1)

只需将money元素转换为整数。 XElements支持显式转换为字符串,布尔值,整数和其他一些类型。例如。如果你想要数据元素钱的价值:

money = (int)xmlDoc.Root.Element("money"); // 300

波浪的资金解析将如下:

var data = xmlDoc.Root;
int money = (int)data.Element("money"); // 300
int lives = (int)data.Element("lives"); // 10
var waves = from w in data.Element("waves").Elements()
            select new {
               Slimes = (int)w.Element("slimes"),
               HealthPerSlime = (int)w.Element("healthPerSlime"),
               Money = (int)w.Element("money")
            };

这将返回两个匿名'wave'对象的集合(考虑为此数据创建类),其中slimeshealthPerSlimemoney被解析为整数。

答案 2 :(得分:0)

每个人似乎都在使用函数给你答案,所以我将使用linq语法给出一个

int money = 
    from element in xmlDoc.Root
    where element.Name == "money"
    select int.Parse(element.Value)).First();

所以让我们把它分解。

xmlDoc.Root将您带到<data>,然后您搜索下一级别的所有元素并返回所有元素where .Name == "money",然后选择.Value将它们解析为int。这会返回一个项目列表,因此您只需抓取.First()一个并将其返回money