我有一个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。
//但是当我执行此代码时,我收到错误“字符串未被识别为有效的日期时间”。任何想法我的代码中的问题是什么?
编辑:没有错误见上文
答案 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