xPath and max function

本文关键字:function max and xPath | 更新日期: 2023-09-27 18:05:41

我有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();

谢谢,

xPath and max function

您可以使用LINQ来处理XML,例如:

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

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

  1. 用第一个节点的日期创建日期变量pretty
  2. 开始遍历xml
  3. 读取时间…使用translate
  4. 转换
  5. 检查它是否比变量老。
  6. 如果是,更新变量
  7. 继续读取xml,直到到达end

try this:

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

试试这个

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