将整数值添加到XML文件的列表中

时间:2010-06-11 05:52:54

标签: c# xml linq

我有一个像

这样的Xml文件
<SampleFile>
 <Data>
   <Element Val="8" /> 
   <Element Val="10" /> 
   <Element Val="12" /> 
   <Element Val="14" /> 
   <Element Val="16" /> 
   <Element Val="9" /> 
   <Element Val="11" /> 
   <Element Val="13" /> 
   <Element Val="15" /> 
   <Element Val="17" /> 
 </Data>
</SampleFile>

我需要读取“Val”的属性值并将其转换为Int32,然后排序然后添加到列表中

现在我正在使用:

  List<Int32> lst = (XDocument.Load("\\Sample.xml").Descendants("Element").Select(l_Temp => l_Temp.Attribute("Val").Value.ToString()).Cast<Int32>().OrderBy(nTemp => nTemp)).ToList();

但它无法正常工作

请给我一个更好的解决方案

2 个答案:

答案 0 :(得分:2)

首先让我们重新格式化一下代码,这样我们才能真正看到发生了什么:

List<Int32> lst = XDocument.Load("\\Sample.xml")
                     .Descendants("Element")
                     .Select(l_Temp => l_Temp.Attribute("Val").Value.ToString())
                     .Cast<Int32>()
                     .OrderBy(nTemp => nTemp)
                     .ToList();

现在,您的Select子句正在选择一系列字符串 - 尽管ToString调用是不必要的,因为XAttribute.Value已经是字符串。

然后您尝试使用Cast<Int32>将这些字符串转换为整数。这不是Cast<T>()所做的。它仅执行引用拆箱转换。幸运的是,XAttribute明确转换为int,这使得所有这一切变得更加简单:

List<Int32> lst = XDocument.Load("\\Sample.xml")
                           .Descendants("Element")
                           .Select(l_Temp => (Int32) l_Temp.Attribute("Val"))
                           .OrderBy(nTemp => nTemp)
                           .ToList();

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/ms459356.aspx

我想,这会对你有所帮助。