用名称空间解析Xml文件,并按降序排序值
本文关键字:降序 排序 文件 Xml 空间 | 更新日期: 2023-09-27 18:02:16
我正在尝试解析以下xml文件:http://reports.ieso.ca/public/DispUnconsHOEP/PUB_DispUnconsHOEP_20110714.xml
我的目标是得到最大的price
及其相关的hour
和最小的price
及其相关的hour
。
我应用的逻辑如下:
解析Xml文件并将其传递给包含hour
和price
对的illist
根据price
检索illist中的第一个值作为最大值,而illist中的最后一个值作为最小值。
My Code is:
XNamespace nsPriceHr = "http://www.theIMO.com/schema";
XDocument xDocument =
XDocument.Load("http://reports.ieso.ca/public/DispUnconsHOEP/PUB_DispUnconsHOEP_20110714.xml");
XElement xEl1 = xDocument.Element(nsPriceHr + "IMODocument");
XElement xEl2 = xEl1.Element(nsPriceHr + "IMODocBody");
XElement xEl3 = xEl2.Element(nsPriceHr + "HOEPs");
var data = (from x in xEl3.Descendants(nsPriceHr + "HOEP")
orderby x.Element(nsPriceHr + "Price").Value descending
select new HourPrice
{
Hour = x.Element(nsPriceHr + "Hour").Value,
Price = x.Element(nsPriceHr + "Price").Value
})
.ToList();
我的问题是:列表没有按预期排序。HourPrice对象接受Hour
和Price
的两个值,其数据成员均为string。
我正在使用c#, . net 3.5 SP1和winforms工作。感谢您的帮助
尝试使用System.Convert
。特别是,您可能对ToInt32
和ToDecimal
感兴趣。这些函数接受字符串(或其他各种数据类型之一),并分别将其转换为int
或decimal
。
var data = (from x in xEl3.Descendants(nsPriceHr + "HOEP")
orderby System.Convert.ToDecimal(x.Element(nsPriceHr + "Price").Value) descending
select new HourPrice
{
Hour = System.Convert.ToInt32(x.Element(nsPriceHr + "Hour").Value),
Price = System.Convert.ToDecimal(x.Element(nsPriceHr + "Price").Value)
})
.ToList();
编辑:下面是检查缺失值的一种方法:
string valueString = x.Element("ElementName").Value;
int value = String.IsNullOrEmpty(valueString) ? 0 : Convert.ToInt32(valueString);
如果您的问题是字符串不是空的,但也不是正确的格式,那么您必须在转换之前将它们转换为正确的格式。也就是说,你必须从像$6.47
这样的字符串中去掉$
。