根据日期从xml文档中检索节点

时间:2012-12-17 13:35:28

标签: c# datetime xml-parsing linq-to-xml

基本上我有一个xml文档,我想根据发布日期检索一些数据。

例如,假设我有以下xml

<books>
    <book>
        <name>Book 1<name>
        <release_date>2011-11-10</release_date>
    </book>
    <book>
        <name>Book 2<name>
        <release_date>2012-03-16</release_date>
    </book>
    <book>
        <name>Book 3<name>
        <release_date>2010-01-22</release_date>
    </book>
    <book>
        <name>Book 4<name>
        <release_date>2011-12-22</release_date>
    </book>
</books>

所以我想要的是例如我通过日期11/15/2011,并且只返回所有以后发布的文件?知道如何实现这个目标吗?

是这样的吗?:

var returnedEl = from XElement e in doc.Root.Elements where e.Element("release_date")> passedDate select e;

那会是另一种有效的方法吗?

2 个答案:

答案 0 :(得分:1)

是的,你非常接近解决方案

var xDoc = XDocument.Load("aa.xml");
DateTime passedDate  = new DateTime(2010,11,11);

var books = xDoc.Descendants("book")
              .Where(b=>DateTime.ParseExact(b.Element("release_date").Value,"yyyy-MM-dd",CultureInfo.InvariantCulture)>passedDate)
              .ToList();

答案 1 :(得分:1)

这也可行,它使用XPathSelectElements命名空间中的System.Xml.XPath

        DateTime dt = new DateTime(2011, 11, 15);

        XDocument doc = XDocument.Load(@"Data.xml");
        var result = doc.XPathSelectElements("books/book/release_date")
                        .Where(el => Convert.ToDateTime(el.Value) > dt);