2012-02-28 76 views
1

好吧,我正在学习如何使用XAML以及如何使用Visual Studio 11 Developer Preview构建新的Windows metro应用程序。Metro应用程序如何阅读XML API?

我有一个问题,虽然我不知道如何阅读XML文件,就像我使用C#一样。例如,这是我过去的做法。

private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      string UrlString = "http://v1.sidebuy.com/api/get/73d296a50d3b824ca08a8b27168f3b85/?city=nashville&format=xml"; 
      XmlTextReader reader = new XmlTextReader(UrlString); 
      XmlNodeType type; 

      while (reader.Read()) 
      { 
       type = reader.NodeType; 

       if ((type == XmlNodeType.Element) && (reader.Name == "highlights")) 
        { 
         reader.Read(); 
         if (reader.Value != "" && reader.Value != null) 
         { 
          listBox1.Items.Add(reader.Value); 
         } 
        } 
       } 
     } 

但这不会在我的地铁应用程序。我需要知道如何为地铁做到这一点。显然XmlTextReader不再有效。任何代码或建议?

感谢

+3

'XmlTextReader'已被弃用了很长时间。您是否尝试过使用其建议的替代品'XmlReader.Create',而不是? – 2012-02-28 17:21:08

回答

2

您可以使用XmlDocument.LoadFromUriAsync。这也应该让你的代码简单得多。

private async void Button_Click(object sender, RoutedEventArgs e) 
     { 
      string UrlString = "http://v1.sidebuy.com/api/get/73d296a50d3b824ca08a8b27168f3b85/?city=nashville&format=xml"; 
      var xmlDocument = await XmlDocument.LoadFromUriAsync(UrlString); 

      //read from xmlDocument for your values. 
     } 

编辑:基于评论的固定代码。

+0

Uri UrlString = new Uri(“http://v1.sidebuy.com/api/get/73d296a50d3b824ca08a8b27168f3b85/?city=nashville&format=xml”); var xmlDocument = XmlDocument.LoadFromUriAsync(UrlString); – allencoded 2012-03-10 21:09:14

+0

当我将它转换为Uri类型时,它似乎不会抛出错误,但现在我很困惑如何读取它。 – allencoded 2012-03-10 21:09:55

+0

你的网址有一个额外的“在最后,它似乎是返回JSON在这种情况下,如果你删除它应该工作。返回的对象是XmlDocument类型。这是一个链接(http://www.csharpfriends.com /Articles/getArticle.aspx?articleID=312)这将帮助你阅读文件。 – sarvesh 2012-03-10 21:19:27

1

你需要添加异步/ AWAIT图片关键词的方法

private async void Button_Click(object sender, RoutedEventArgs e) 

var xmlDocument = await XmlDocument.LoadFromUriAsync(UrlString); 
0

您还可以XmlSerializer类,它允许你声明在XML中使用的对象类型,并直接映射到他们。反序列化和序列化方法适用于任何流,并大大简化了使用XML数据。

var xmlserializer = new XmlSerializer(typeof(yourcollectionclass), new []{typeof(yourchildclass1),typeof(yourchildclass2)}); 
var xml = (yourcollectionclass) xml.deserialize(stream) 
相关问题