2013-08-23 24 views
0

因此,我開始學習如何在應用程序中使用XML數據,決定使用一些免費的數據來做到這一點,但我不能爲我的生活得到它的工作,這是迄今爲止我的代碼。 (我已經做了靜態數據的一些應用程序之前,但嘿應用程序的設計使用網絡的權利:P)深入研究XML(Windows Phone)的錯誤我不明白(''字符,十六進制值0x20,不能包含在名稱中。)

public partial class MainPage : PhoneApplicationPage 
{ 
    List<XmlItem> xmlItems = new List<XmlItem>(); 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     LoadXmlItems("http://hatrafficinfo.dft.gov.uk/feeds/datex/England/CurrentRoadworks/content.xml"); 
     test(); 
    } 

    public void test() 
    { 
     foreach (XmlItem item in xmlItems) 
     { 
      testing.Text = item.Title; 
     } 
    } 

    public void LoadXmlItems(string xmlUrl) 
    { 
     WebClient client = new WebClient(); 

     client.OpenReadCompleted += (sender, e) => 
     { 
      if (e.Error != null) 
       return; 

      Stream str = e.Result; 
      XDocument xdoc = XDocument.Load(str); 

      ***xmlItems = (from item in xdoc.Descendants("situation id") 
               select new XmlItem() 
               { 
                Title = item.Element("impactOnTraffic").Value, 
                Description = item.Element("trafficRestrictionType").Value 
               }).ToList();*** 
      // close 
      str.Close(); 

      // add results to the list 
      xmlItems.Clear(); 
      foreach (XmlItem item in xmlItems) 
      { 
       xmlItems.Add(item); 
      } 
     }; 
     client.OpenReadAsync(new Uri(xmlUrl, UriKind.Absolute)); 
    } 
} 

我基本上是想學習如何在那一刻,我很好奇如何做到這一點實際上它(我知道有很多方法,但ATM這種方式似乎是最簡單的)我只是沒有得到什麼錯誤是自動取款機。 (位於*是它說錯誤在哪裏)

我也知道顯示功能ATM不是很好(因爲它只會顯示最後一個項目),但測試這將做現在。

對於某些人來說,看起來很簡單,因爲學習者對我來說不是那麼容易。

以圖片形式的錯誤: (看來我不能發表圖片:/)提前

感謝您的幫助

編輯: 回答以下固定的錯誤:d 但是仍然什麼都沒有出現。我「認爲」這是因爲XML佈局和它的後代數量(無法解決我需要做的事情,即作爲XML的noob並將其作爲數據源從網上拉下來)

也許我開始了太複雜:/

還在爲如何從進料拉一些元素任何幫助/提示(因爲所有後代)正確,並將其儲存將是巨大的:d

EDIT2: 我有工作(粗糙的方式),但仍然:D

感謝Adam M阿拉!

最後一個問題是雙重上市。 (將它添加到列表中,然後將它添加到另一個列表導致一個空的異常)只需使用方法中的1列表解決了這個問題(可能不是最好的方法,但它現在可行),並允許我將結果添加到列表框中,直到我花費一些時間研究如何使用ListBox.ItemTemplate & DataTemplate使其看起來更具吸引力。 (看起來很簡單,我現在說...)

再次感謝!

回答

1
from item in xdoc.Descendants("situation id") 
//         ^

XML標籤名稱不能包含空格。看看XML,你可能只想"situation"匹配<situation>元素。


看完您的編輯並進一步檢查XML後,我找出了問題所在。如果您查看文檔的根元素:

<d2LogicalModel xmlns="http://datex2.eu/schema/1_0/1_0" modelBaseVersion="1.0"> 

您會看到它應用了默認名稱空間。您的問題,最簡單的解決方法是將首先從根元素的namespsace:

var ns = xdoc.Root.Name.Namespace; 

然後無論你正在使用一個字符串來標識元素或屬性名稱應用它:

from item in xdoc.Descendants(ns + "situation") 
// ... 
item.Element(ns + "impactOnTraffic").Value 
item.Element(ns + "trafficRestrictionType").Value 

一兩件事:<impactOnTraffic><trafficRestrictionType><situation>元素不直接孩子,所以你需要更改代碼,以及:

Title = items.Descendants(ns + "impactOnTraffic").Single().Value, 
Description = item.Descendants(ns + "trafficRestrictionType").Single().Value 
+0

我知道這將是簡單的事情...將在一分鐘內嘗試。 再次感謝! – MajorShots

+0

是的,錯誤消失了,但仍然沒有出現。我「認爲」這是因爲XML佈局和它的後代數量(無法解決我需要做的事情,即作爲XML的noob並將其作爲數據源從網上拉下來) 也許我開始太複雜了:/ 仍然任何幫助/提示如何從飼料中拉出一些元素(因爲所有在後代)正確並存儲他們將是巨大的:D – MajorShots

+0

@ ThatUser1我已經根據你的新問題修改了我的答案。 –

相關問題