【问题标题】:Read XML File in Xamarin在 Xamarin 中读取 XML 文件
【发布时间】:2015-11-06 22:52:53
【问题描述】:

我是 Xamarin 的新手,正在寻找可移植类库中的 XML 文件。

该文件可以嵌入或在线,我已经做了一些研究并找到了两者的选项,但是对于如此简单的任务,我发现的一切都过于复杂。我想知道是否有人有一个简单、干净的方法来完成这个。

唯一的规定是您使用可移植类库,以便 iOS、Android 和 Windows Phone 项目都可以使用相同的方法。

上下文: 基本上,我正在构建一个将放入 ListViewer 的项目列表。每个 Item 都有一个 Name 字符串和一个 ImageSource 字符串。我有包含我想要使用的信息的 xml 文档,我只需要一种简单的方法来读取 Xamarin 中的这些 xml 文件。

感谢您提供的任何帮助!

【问题讨论】:

    标签: c# android xml xamarin


    【解决方案1】:

    PCL 无法访问 System.IO.File,但可以访问 System.IO.FileStream。

    我相信解决您问题的一种方法是将您的 xml 文件作为资源添加到您的 PCL 中,将文件加载到 FileStream 对象中并使用 StreamReader 读取它,看看这篇文章

    http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/files/

    虽然我建议您将文件转换为 json,因为我不知道 PCL 中是否提供 XML 反序列化器。

    通过 json,您可以使用 json.net 库并轻松使用您的文件。

    【讨论】:

    • 感谢您提供嵌入式文件文章的链接,我使用了在线文件,您可以在下面看到我的答案。干杯!
    • @MattyMerrix 如果我的帖子对您​​有帮助,请务必点击投票/回答。
    【解决方案2】:

    这就是我所拥有的。我正在使用在线存储的 xml 文件,将它们下载到 Stream 中,然后将 Stream 传递给 XMLReader 类。所有这些都是 CrossPlatform 代码。

    如果您想像@Dimitris Batsougiannis 在他的评论中解释的那样,将 xml 文件作为应用程序资源嵌入,这是第二种选择。但是一旦你有了你的流,代码就会是一样的。简单地说,将您的流传递给 BuildItemList 方法。

    public class ItemHelper
    {
        public static bool IsReadingXML { get; set; }
        public static List<Item> ItemList { get; set; }
    
        public static void BeginReadXMLStream(string currFileName)
        {
            IsReadingXML = true;
    
            string ImagesRootFolder = "http://www.mywebsite.com/";
            HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(ImagesRootFolder + currFileName);
            httpRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), httpRequest);
        }
    
        private static void FinishWebRequest(IAsyncResult result)
        {
            IsReadingXML = true;
    
            HttpWebResponse httpResponse = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
            if (httpResponse.StatusCode == HttpStatusCode.OK)
            {
                Stream httpResponseStream = httpResponse.GetResponseStream();
                BuildItemList(httpResponseStream);
            }
        }
    
        public static void BuildItemList(Stream xmlStream)
        {
            string ImagesRootFolder = "http://www.mywebsite.com/";
            List<Item> returnValue = new List<Item>();
    
            try
            {
                using (XmlReader myXMLReader = XmlReader.Create((xmlStream)))
                {
                    while (myXMLReader.Read())
                    {
                        if (myXMLReader.Name == "photo")
                        {
                            double tempPrice = 0.0;
                            double.TryParse(myXMLReader.GetAttribute("price"), out tempPrice);
    
                            returnValue.Add(new Item(
                                myXMLReader.GetAttribute("info"),
                                tempPrice,
                                ImagesRootFolder + myXMLReader.GetAttribute("image"),
                                myXMLReader.GetAttribute("sku")
                                ));
                        }
                    }
                }
            }
            catch { }
    
            //Done
            ItemList = returnValue;
            IsReadingXML = false;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-23
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多