xPath和max函数

时间:2011-08-15 10:16:36

标签: c# .net linq xslt xpath

我有xml文件,我想查找具有最早日期的节点。

没有XLST可以做到吗?

代码:

var xml = @"<books>
                      <book>
                        <id>1</id>
                        <date>2011-01-02</date>
                      </book>
                      <book>
                        <id>2</id>
                        <date>2011-02-02</date>
                      </book>
                      <book>
                        <id>3</id>
                        <date>2011-03-01</date>
                      </book>
                    </books>
                    ";

XDocument document = XDocument.Parse(xml);    
var result = document.XPathSelectElements("//books/book[max(????)]").ToList();

谢谢,

5 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

没有直接的方法可以做到这一点。 一些简单的算法将是......:

  1. 使用第一个节点的日期/
  2. 创建日期变量
  3. 开始迭代xml
  4. 阅读时间..使用translate
  5. 转换它
  6. 检查它是否旧于变量。
  7. 如果是,请更新您的变量
  8. 继续阅读以太网中的xml,直到结束

答案 2 :(得分:0)

试试这个:

var result = document
                .Elements("books")
                .Elements("book")
                .Elements("date")
                .Min(e => DateTime.Parse(e.Value));

答案 3 :(得分:0)

您可以使用LINQ to XML,例如:

var result = document.Element("books")
            .Elements("book")
            .OrderByDescending(b => (DateTime)b.Element("date"))
            .First();

答案 4 :(得分:0)

试试这个。

var booksList = document.Descendants("book")
            .Min(b => Convert.ToDateTime(b.Element("date").Value));