C# 使用LINQ从XML中读取整数
我得到了这个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
<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
,您需要哪一个?