2014-04-06 196 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