2012-06-17 24 views
1

我想要什麼
檢索任務「過期」元素過期。如何在WinRT中使用LinQ過濾空的XML元素?

的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 

是什麼錯誤

類型的異常「Sys系統tem.FormatException'發生在mscorlib.dll中,但未在用戶代碼中處理

附加信息:String未被識別爲有效的DateTime。 如果有這種異常的處理程序,程序可能會安全地繼續。

-_-
如果我刪除的元素 「因」 是空的任務,錯誤就走開了。
但不要只用下面的代碼過濾空元素?!

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

爲什麼以及如何解決它?

回答

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 
相關問題