2011-07-18 134 views
0

我试图用Windows Phone 7创建应用程序,该应用程序显示来自特定URI的数据,但它不起作用。我是堆栈,请帮助我。 这是我的XML:WP7的XML读取问题

<?xml version="1.0" encoding="utf-8" ?> 
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0"> 
    <forecast_conditions> 
     <day_of_week data="lun."/> 
     <low data="28"/> 
     <high data="38"/> 
     <icon data="/ig/images/weather/mostly_sunny.gif"/> 
     <condition data="Partiellement ensoleillé"/> 
    </forecast_conditions> 
    <forecast_conditions> 
     <day_of_week data="mar."/> 
     <low data="27"/> 
     <high data="39"/> 
     <icon data="/ig/images/weather/sunny.gif"/> 
     <condition data="Temps clair"/> 
    </forecast_conditions> 
    <forecast_conditions> 
     <day_of_week data="mer."/> 
     <low data="25"/> 
     <high data="38"/> 
     <icon data="/ig/images/weather/mostly_sunny.gif"/> 
     <condition data="Ensoleillé dans l'ensemble"/> 
    </forecast_conditions> 
    <forecast_conditions> 
     <day_of_week data="jeu."/> 
     <low data="24"/> 
     <high data="33"/> 
     <icon data="/ig/images/weather/mostly_sunny.gif"/> 
     <condition data="Ensoleillé dans l'ensemble"/> 
    </forecast_conditions> 
</weather> 

这是我的C#代码:

namespace WEATHER2 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
     // Constructeur 
     public MainPage() 
     { 
      InitializeComponent(); 
      XDocument doc = XDocument.Load("Gweather.xml"); 
      var x= from c in doc.Descendants("forecast_conditions") 
      select new Weather_Element() 
      { 
       Day = (string)c.Attribute("day_of_week").Value, 
       Low = (string)c.Attribute("low").Value, 
       High = (string)c.Attribute("high").Value, 
       Condition = (string)c.Attribute("condition").Value 
       }; 
      listBox1.ItemsSource = x; 
     } 

     public class Weather_Element 
     { 
      string day; 
      string low; 
      string high; 
      string condition; 

      public string Day 
      { 
       get { return day; } 
       set { day = value; } 
      } 
      public string Low 
      { 
       get { return low; } 
       set { low = value; } 
      } 
      public string High 
      { 
       get { return high; } 
       set { high = value; } 
      } 
      public string Condition 
      { 
       get { return condition; } 
       set { condition = value; } 
      } 
     } 
    } 
} 
+1

什么是不工作? 'x'没有填充你的数据,或者你只是没有看到你的UI中的任何东西。如果它是你的用户界面,那么你将需要发布XAML。 – 1adam12

+0

顺便说一句:如果你使用C#3.0及以上版本,尝试在你的'Weather_Element'类自动实现的属性: '公共串日{获得;集;}'。 有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/bb384054.aspx。 – CodeZombie

+0

谢谢你们!但是我想知道如何使用Web服务从URI读取数据(让我们假设它是相同的数据) – MarTech

回答

1

您正试图获得属性从一个元素值,而无需属性。

var x = from c in doc.Descendants("forecast_conditions") 
select new Weather_Element() 
{ 
    Day = c.Element("day_of_week").Attribute("data").Value, 
    Low = c.Element("low").Attribute("data").Value, 
    High = c.Element("high").Attribute("data").Value, 
    Condition = c.Element("condition").Attribute("data").Value 
}; 

forecast_conditions类型的元件c具有元件day_of_week。然后这个元素有一个属性data

1

您的forecast_conditions没有任何属性,它们具有子元素,而该子元素具有data属性。因此,而不是

 var x= from c in doc.Descendants("forecast_conditions") 
     select new Weather_Element() 
     { 
      Day = (string)c.Attribute("day_of_week").Value, 
      Low = (string)c.Attribute("low").Value, 
      High = (string)c.Attribute("high").Value, 
      Condition = (string)c.Attribute("condition").Value 
      }; 

使用

 var x= from c in doc.Descendants("forecast_conditions") 
     select new Weather_Element() 
     { 
      Day = (string)c.Element("day_of_week").Attribute("data"), 
      Low = (string)c.Element("low").Attribute("data"), 
      High = (string)c.Element("high").Attribute("data"), 
      Condition = (string)c.Element("condition").Attribute("data") 
      };