按日期排序的问题---> XML

时间:2009-12-27 19:05:34

标签: c# xml xpath

我有一个xml,我想按date.my代码对它进行排序,直到现在是这个

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>

我的日期是yyyy-mm-dd格式。我已尝试过其他格式的日期,如mm / dd / yyyy和dd / mm / yyyy。

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

编辑:没有错误见上文

3 个答案:

答案 0 :(得分:0)

假设日期被视为字符串,您需要为Convert.ToDateTime方法提供IFormatProvider,因为您使用的日期是非标准的。如果不这样做conversion method will use the current culture

例如,英国英语为日 - 月,美国英语为月 - 日。

对于年度工作日,您甚至可能需要自定义格式提供程序,或者您可以使用DateTime.ParseExact

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

答案 1 :(得分:0)

可以解析日期......或者您实际上可以利用您的日期格式是可排序的这一事实。尝试只指定StringComparer.Ordinal。诚然,这不会发现任何不良数据 - 但它会按字母顺序排序,这将按照你想要的日期进行。

答案 2 :(得分:0)

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

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

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

请注意,读者应该知道如何处理DateTime格式。如果读取系统是基于Unix的,那么您可能希望编写FileTime而不是DateTime