2012-05-08 22 views
0

目標: 根據今天的日期和月份,從XML獲取實際值和未來兩天的值。根據日期,從XML得到今天和未來兩天的值?

問題: 雖然我的c.Attribute(「Day」)。值發生變化,但我的c.Attribute(「Month」)。Value保持不變。所以如果實際的一天我2012年4月30日,那麼它將顯示2012年4月30日的祈禱時間,但不是01.05.2012和02.05.2012。如何解決這個問題?

另外我不確定這Dato = c.Attribute("Day").Value + "." + c.Attribute("Month").Value + "." + myDay.Year.ToString(),是否有什麼好處?我希望列表框顯示它正在獲取的xml的日期。

請幫忙。 下面我的代碼,XML和類。

var filteredData3 = from c in loadedCustomData.Descendants("PrayerTime") 
    where int.Parse(c.Attribute("Day").Value) >= myDay.Day && int.Parse(c.Attribute("Day").Value) < (myDay.Day + 3) 
    && c.Attribute("Month").Value == myDay.Month.ToString() 


     select new Bønn() 
     { 

     Dato = c.Attribute("Day").Value + "." + c.Attribute("Month").Value + "." + myDay.Year.ToString(), 
     Fajr = TimeSpan.Parse(c.Attribute("Fajr").Value), 
     Sunrise = TimeSpan.Parse(c.Attribute("Sunrise").Value), 
     Zohr = TimeSpan.Parse(c.Attribute("Zohr").Value), 
     Asr = TimeSpan.Parse(c.Attribute("Asr").Value), 
     Maghrib = TimeSpan.Parse(c.Attribute("Maghrib").Value), 
     Isha = TimeSpan.Parse(c.Attribute("Isha").Value), 
     Jumma = TimeSpan.Parse(c.Attribute("Jumma").Value), 

     }; 

listBox1.ItemsSource = filteredData3; 

這裏是我的類:

public class Bønn 
{ 

    public TimeSpan Fajr { get; set; } 
    public TimeSpan Sunrise { get; set; } 
    public TimeSpan Zohr { get; set; } 
    public TimeSpan Asr { get; set; } 
    public TimeSpan Maghrib { get; set; } 
    public TimeSpan Isha { get; set; } 
    public TimeSpan Jumma { get; set; } 

    public string Dato { get; set; } 

} 

這裏是我的XML:

<PrayerTime 
     Dag ="30" 
     Måned="4" 
     Fajr="04:09" 
     Sunrise="05:19" 
     Zohr="13:19" 
     Asr="18:30" 
     Maghrib="21:14" 
     Isha="22:24" 

    /> 
    <PrayerTime 
     Dag ="1" 
     Måned="5" 
     Fajr="04:08" 
     Sunrise="05:16" 
     Zohr="13:19" 
     Asr="18:31" 
     Maghrib="21:17" 
     Isha="22:25" 

    /> 
    <PrayerTime 
     Dag ="2" 
     Måned="5" 
     Fajr="04:06" 
     Sunrise="05:13" 
     Zohr="13:19" 
     Asr="18:33" 
     Maghrib="21:19" 
     Isha="22:27" 
    /> 
+0

這是一個重複的問題兆,我標記你的舊關閉。將來你應該修改你的舊問題或刪除它。 –

回答

3

我建議你改變你的 「模型」 類中使用DateTime而不是string的日期。轉換全部將元素放入您的模型類中,然後然後過濾器。這將比嘗試基於屬性進行算術要簡單得多。

另請注意,使用來自XAttribute的顯式轉換比在任何地方調用int.Parse簡單。我真的建議建立在你的模型類的靜態FromXElement方法,所以你可以寫:

DateTime start = DateTime.Today; 
// We'll use this as an *exclusive* upper bound 
DateTime end = start.AddDays(3); 

var query = from c in loadedCustomData.Descendants("PrayerTime") 
      let bonn = Bønn.FromXElement(c) 
      where bonn.Dato >= start && bonn.Dato < end; 
      select bonn; 

還是在擴展方法的語法:

// start and end as before 
var query = loadedCustomData.Descendants("PrayerTime") 
       .Select(c => Bønn.FromXElement(c)) 
       .Where(bonn => bonn.Dato >= start && bonn.Dato < end); 
+0

爲什麼不使用XElement而不是FromXElement的構造函數? –

+0

@ChuckSavage:我已經開始發現命名靜態方法比構造函數更具可讀性,特別是當你想要兩個具有相同參數類型的方法時'TimeSpan.FromHours'和'TimeSpan.FromDays'。對於轉換,我通常使用靜態'FromXyz'方法和實例'ToXyz'方法。 –

+0

嗯..我有真正的基本技能在C#,現在我卡住了,因爲我沒有從桌子上得到任何東西。問題是我的XML不包含一年。一天一個屬性,一個月屬性。它現在就像現在一樣工作,但有關月末的問題。另外它說FromXElement沒有在Bonn類中找到... – Megaoctane