WP7的XML阅读问题

时间:2011-07-18 10:29:02

标签: c# parsing windows-phone-7 linq-to-xml

我正在尝试使用Windows Phone 7创建一个应用程序,该应用程序显示来自特定URI的数据,但它不起作用。我是堆栈,请帮帮我。 这是我的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; }
            }
        }
    }
}

2 个答案:

答案 0 :(得分: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
};

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

答案 1 :(得分: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")
          };