1

我想要
检索“到期”元素过期的任务。

XML 是什么

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<tasks>
  <task>    
    <title>11111</title>
    <due>2012/06/18</due>
  </task>
  <task>
    <title>2121211212</title>    
    <due></due>
  </task>
</tasks>

我编码的内容

        var res = from q in xml.Root.Descendants("task")
                  where q.Element("due").IsEmpty == false & (Convert.ToDateTime(q.Element("due").Value)).Date < DateTime.Now.Date
                  select q

错误是什么

mscorlib.dll 中出现“System.FormatException”类型的异常,但未在用户代码中处理

附加信息:字符串未被识别为有效的日期时间。如果有这个异常的处理程序,程序可以安全地继续。

-_-
如果我删除元素“到期”为空的任务,错误就消失了。
但是我不只是用下面的代码过滤空元素吗?!

q.Element("due").IsEmpty == false

为什么以及如何解决它?

4

1 回答 1

1

XElement.IsEmpty

请注意,包含开始和结束标记且标记之间没有内容的元素不被视为空元素。它有没有长度的内容。只有仅包含开始标记并表示为终止的空元素的元素才被认为是空的。

您可以string.IsNullOrWhiteSpace用来检查元素是否包含文本字符:

var res = from q in xml.Root.Descendants("task")
          where q.Element("due").IsEmpty == false &&
                string.IsNullOrWhiteSpace(q.Element("due").Value) == false &&
                Convert.ToDateTime(q.Element("due").Value).Date < DateTime.Now.Date
          select q
于 2012-06-17T17:43:07.293 回答