用名称空间解析Xml文件,并按降序排序值

本文关键字:降序 排序 文件 Xml 空间 | 更新日期: 2023-09-27 18:02:16

我正在尝试解析以下xml文件:http://reports.ieso.ca/public/DispUnconsHOEP/PUB_DispUnconsHOEP_20110714.xml

我的目标是得到最大的price及其相关的hour和最小的price及其相关的hour

我应用的逻辑如下:

解析Xml文件并将其传递给包含hourprice对的illist

根据price

按降序排序illist

检索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对象接受HourPrice的两个值,其数据成员均为string。

我正在使用c#, . net 3.5 SP1和winforms工作。感谢您的帮助

用名称空间解析Xml文件,并按降序排序值

尝试使用System.Convert。特别是,您可能对ToInt32ToDecimal感兴趣。这些函数接受字符串(或其他各种数据类型之一),并分别将其转换为intdecimal

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这样的字符串中去掉$