2009-12-27 81 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的,那麼你可能想寫文件時間而不是日期時間