我从这里获得了这个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;
有人可以告诉我我做错了什么。
答案 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'对象的集合(考虑为此数据创建类),其中slimes
,healthPerSlime
和money
被解析为整数。
答案 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
。