C# 使用LINQ从XML中读取整数

C# 使用LINQ从XML中读取整数,c#,xml,linq,linq-to-xml,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> &l

我得到了这个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>
以及:

但我一直得到一个FormatException“输入字符串的格式不正确。”


有人能告诉我我做错了什么吗。

只要把
money
元素转换成整数就行了。XElements支持显式转换为字符串、布尔值、整数和其他类型。例如,如果您想要数据元素货币的价值:

money = (int)xmlDoc.Root.Element("money"); // 300
wave资金的解析如下所示:

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”对象的集合(考虑为此数据创建类),其中
slimes
healthPerSlime
money
被解析为整数。

只需将
money
元素转换为整数即可。XElements支持显式转换为字符串、布尔值、整数和其他类型。例如,如果您想要数据元素货币的价值:

money = (int)xmlDoc.Root.Element("money"); // 300
wave资金的解析如下所示:

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”对象的集合(考虑为该数据创建类),其中
slimes
healthPerSlime
money
解析为整数。

应该是

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

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

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

int money = 
    from element in xmlDoc.Root
    where element.Name == "money"
    select int.Parse(element.Value)).First();
让我们把它分解一下


xmlDoc.Root
将您带到
然后在下一级搜索所有元素并返回所有元素
where.Name==“money”
,然后选择这些元素的
.Value
并将其解析为int。这将返回一个项目列表,因此您只需获取
.First()
one并将其返回给
money

每个人似乎都在使用函数给您一个答案,因此我将使用linq语法给您一个答案

int money = 
    from element in xmlDoc.Root
    where element.Name == "money"
    select int.Parse(element.Value)).First();
让我们把它分解一下


xmlDoc.Root
将您带到
然后在下一级搜索所有元素并返回所有元素
where.Name==“money”
,然后选择这些元素的
.Value
并将其解析为int。这将返回一个项目列表,因此您只需获取
.First()
1并将其返回到
money

我已编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。你在根级别有
money
,即
300
,然后你有
money
wave
,你需要哪一个?我已经编辑了你的标题。请参见“”,其中的共识是“不,他们不应该”。您在根级别有
,即
300
,然后您有
wave
,您需要哪一个?