【问题标题】:Metro Application How to Read XML API?Metro 应用程序如何读取 XML API?
【发布时间】:2012-02-28 06:02:37
【问题描述】:

好的,我正在尝试学习如何使用 XAML 以及如何使用 Visual Studio 11 Developer Preview 构建新的 Windows Metro 应用程序。

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

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);
                        }
                    }
                }
        }

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

谢谢

【问题讨论】:

  • XmlTextReader 已被弃用多年。您是否尝试过使用其建议的替代品XmlReader.Create

标签: c# xml xaml windows-8 microsoft-metro


【解决方案1】:

您可以使用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.
         }

编辑:根据注释修复代码。

【讨论】:

  • Uri UrlString = new Uri("v1.sidebuy.com/api/get/73d296a50d3b824ca08a8b27168f3b85/…); var xmlDocument = XmlDocument.LoadFromUriAsync(UrlString);
  • 当我将它转换为 Uri 类型时,它似乎没有抛出错误,但现在我很困惑如何阅读它。
  • 您的网址末尾有一个额外的 ",如果您删除它应该工作,它似乎在这种情况下返回 JSON。返回的对象是 XmlDocument 类型。这是一个链接 (@987654323 @) 这将帮助您阅读文件。
  • @Christian 我修复了代码,你说得对,它是一个异步操作。
【解决方案2】:

您需要将 async/await 键添加到方法中

private async void Button_Click(object sender, RoutedEventArgs e)

var xmlDocument = await XmlDocument.LoadFromUriAsync(UrlString);

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      相关资源
      最近更新 更多