2009-12-27 77 views
0

我有一个xml,我想通过date.my代码进行排序它到现在为止是这样的问题按日期排序---> XML

XmlDocument doc = new XmlDocument(); 

    doc.Load("/ABC.xml"); 

    XPathNavigator nav = doc.CreateNavigator(); 

     //doing some filtering and creating xpath expression based on that 
    XPathExpression expression = nav.Compile(xpath); 
    XPathExpression sortexpression = nav.Compile("/categories/category/date/text()"); 
    DateComparer dc = new DateComparer(); 

    //expression.AddSort("sortexpression", dc); 

编辑:我已经改变了这

expression.AddSort(sortexpression,dc); 

现在没有错误,但sortin不能正常工作,而当我开始知道在datecomparer类中只有我的xml的第一个日期正在进行,并且因此没有进行排序。但为什么只有我的第一个XML日期进入datecomparer.Any想法,我错了?

XPathNodeIterator iterator = nav.Select(expression); 

后来与我的中继

public class DateComparer : IComparer 
    { 

     public DateComparer() { } 
     public int Compare(object date1, object date2) 
     { 

      DateTime d1 = Convert.ToDateTime(date1); 
      DateTime d2 = Convert.ToDateTime(date2); 
          return d1.CompareTo(d2); 
     } 

    } 

我的XML绑定此迭代器是这样

<categories> 
<category> 
    <title>ABCD<title> 
    <date>2002-01-01<date> 
<category> 
<categories> 

日期I M安宁是YYYY-MM-DD格式。我也尝试过其他格式的日期,例如mm/dd/yyyy和dd/mm/yyyy。

//但是当我执行此代码时,我得到错误“字符串未被识别为有效的日期时间”。任何想法在我的代码中有什么问题?

编辑:没有错误见上

回答

0

假设为字符串你将需要提供IFormatProviderConvert.ToDateTime方法,您使用的日期,该日期是读的是非标准。如果你不那么conversion method will use the current culture

英国英语将是日 - 月 - 年,美国英语将例如是月 - 日 - 年。

对于年 - 月 - 日你甚至可能需要自定义格式提供,或者你可以使用DateTime.ParseExact

DateTime dt = DateTime.ParseExact (s, "yyyy-MM-dd", CultureInfo.InvariantCulture); 
+0

感谢您的答复我已经测试了mm/dd/yyyy和dd/mm/yyyy但仍然错误是一样的 – 2009-12-27 19:24:13

0

可以解析日期...或者你实际上可以采取的优势事实上你的日期格式是可排序的。尝试只指定StringComparer.Ordinal。这不会发现任何不良数据,但它会按字母顺序排序,这将按照日期进行。

0

通过ToString(...)将DateTime \ TimeSpan写入Xml文件最终会失败。

根据我的经验,最好的方法是将Ticks值(TimeSpan.Ticks)写入XML。

唯一的缺点是,如果您查看XML时很难读取数字,如果这很重要,您可以随时添加文本格式的日期属性以方便阅读。

请注意,读者应该知道如何处理日期时间格式。如果读取系统是基于Unix的,那么你可能想写文件时间而不是日期时间