【问题标题】:Retrieving nodes from xml document based on date根据日期从 xml 文档中检索节点
【发布时间】:2012-12-04 14:39:13
【问题描述】:

基本上我有一个 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>

所以我想要的是,例如,我通过了 2011 年 11 月 15 日的日期,并且只有稍后发布的所有文件都应该返回?知道如何实现吗?

是这样的吗?:

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

O 什么是另一种可行且最佳的方法?

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

      【解决方案2】:

      这也可以,它使用来自System.Xml.XPath 命名空间的XPathSelectElements

              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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-03
        • 2013-09-12
        • 1970-01-01
        • 2013-12-05
        • 2022-01-19
        • 2016-11-05
        • 2020-01-15
        相关资源
        最近更新 更多