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

エラーの内容

タイプ 'System.FormatException' の例外が mscorlib.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: 文字列は有効な DateTime として認識されませんでした。この例外のハンドラがあれば、プログラムは安全に続行できます。

---
要素「due」が空のタスクを削除すると、エラーはなくなりました。
しかし、以下のコードで空の要素をフィルタリングするだけではありませんか?!

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 に答える