2009-12-27 3 views
0

나는 XML을 가지고 지금이문제 ---> 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); 

편집까지 나는 date.my 코드를 정렬하려면 : 나는

expression.AddSort(sortexpression,dc); 
이 변경되었습니다

오류가 없지만 sortin이 제대로 작동하지 않습니다. datecomparer 클래스에서 내 xml의 첫 번째 날짜가 가고 있다는 것을 알게되면서 정렬 작업이 진행되지 않습니다. 그런데 왜 XML의 첫 데이트가 datecomparer.Any Idea에 들어가는가?

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을이 반복자 바인딩에 내가 YYYY-MM-DD 형식에 포기하고있어이

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

날짜 같다. 나는 mm/dd/yyyy 및 dd/mm/yyyy와 같은 다른 형식으로 날짜를 시도했습니다.

//하지만이 코드를 실행할 때 "문자열이 유효한 Datetime으로 인식되지 않았습니다."라는 오류가 발생했습니다. 내 코드의 문제는 무엇입니까?

편집 : 오류가 당신이 IFormatProvider 사용하는 날짜와 같은 Convert.ToDateTime 방법을 제공하기 위해 필요 해요 문자열로 날짜를 읽을 것을 가정

답변

0

위의 볼이 아닌 표준입니다. 그렇지 않으면 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를 모두 테스트했지만 오류는 같습니다. –

0

당신은 날짜를 구문 분석 할 수 ... 또는 당신은 실제로 활용할 수 날짜 형식이 정렬 가능한 사실입니다. StringComparer.Ordinal을 지정하면됩니다. 알 수 있듯이 나쁜 데이터는 발견되지 않지만 사전 순으로 정렬되어 원하는 날짜에 날짜를 지정할 수 있습니다.

0

ToString (...)에 의해 Xml 파일에 DateTime \ TimeSpan을 쓰면 결국 실패합니다.

내 경험에 따르면 가장 좋은 방법은 Ticks 값 (TimeSpan.Ticks)을 XML에 쓰는 것입니다.

유일한 단점은 XML을 보면 숫자를 읽는 것이 어렵다는 것입니다. 중요한 경우 항상 쉽게 읽을 수 있도록 텍스트 특성으로 날짜 특성을 추가 할 수 있습니다.

독자는 DateTime 형식을 처리하는 방법을 알아야합니다. 독서 시스템이 Unix 기반이라면 DateTime 대신 FileTime을 쓰고 싶을 수도 있습니다