2014-04-06 149 views
1

我有一個問題,即時通訊嘗試從URL的xml文件的屬性中獲取值。c#無法從xml獲取屬性

XML:http://thegamesdb.net/api/GetGamesList.php?name=x-men

代碼:

public MainPage() 
    { 
     InitializeComponent(); 

     var webClient = new WebClient(); 
     webClient.DownloadStringCompleted += RequestCompleted; 
     webClient.DownloadStringAsync(new  Uri("http://thegamesdb.net/api/GetGamesList.php?name=x-men")); 
    } 

    private void RequestCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error == null) 
     { 
      var feedXml = XDocument.Parse(e.Result); 

      var gameData = feedXml.Root.Elements("Game").Select(x => new GetGamesList 
       { 
// ERROR VALUES ARE NULL 
        ID = (int)x.Attribute("id"), 
        GameTitle = (string)x.Attribute("GameTitle"), 
        ReleaseDate = (string)x.Attribute("ReleaseDate"), 
        Platform = (string)x.Attribute("Platform") 
       }) 
       .ToList(); 
     } 
    } 

public class GetGamesList 
{ 
    public int ID { get; set; } 
    public string GameTitle { get; set; } 
    public string ReleaseDate { get; set; } 
    public string Platform { get; set; } 
} 

我希望有一個人可以幫助我,謝謝。

+0

你想要得到一個元素? – bubbinator

+0

是的,現在我只是想獲得其中的一個元素。 – Thunder

回答

0

id, GameTitle, ReleaseDatePlatformGame下的所有要素,即:

ID = int.Parse(x.Element("id")), 
    GameTitle = (string)x.Element("GameTitle"), 
    ReleaseDate = (string)x.Element("ReleaseDate"), 
    Platform = (string)x.Element("Platform") 

您還需要解析INT。

+0

是的,它的工作原理。謝謝。但我認爲是一個「元素」,並且是一個「屬性」?, – Thunder

+0

xml中的屬性位於元素上,用引號括起來。你的代碼會像這樣解析xml:'' – StuartLC

+0

謝謝,但是什麼時候它是xml文件中的一個屬性? – Thunder

0

您需要FirstOrDefault而不是Select。在地方選擇的試試這個:

.FirstOrDefault(e => e.Attribute("id") == "665") 

只要你想要的ID#替換665部分。

編輯:在看StuartLC的答案和提供的XML文件。我忽略了你使用的簡單設計。您試圖獲取的數據確實是元素,而不是屬性。所以,你會需要更換Attribute調用Element像這樣:

.FirstOrDefault(e => e.Element("id") == "665") 

在一個側面說明,中Elements返回值是一個IEnumerable<XElement>它允許你在它遍歷值。

編輯:這將返回包含所需數據的XElement。此時,您可以使用StuartLC的答案將數據傳輸到您的班級。

+0

好的,謝謝。 – Thunder