Чтение XML-файла и сохранение содержимого в память WP7

#c# #xml #windows-phone-7

#c# #xml #windows-phone-7

Вопрос:

У меня есть xml с данными, в данном случае изображениями, хранящимися в Интернете .. я хочу прочитать xml в Windows phone и сохранить его в памяти.. как я могу это сделать? любой учебник?

Комментарии:

1. откуда вы читаете / получаете файл? где вы хотите его сохранить? внутренняя память?

2. я хочу прочитать файл с сервера и сохранить его во внутренней памяти или на карте памяти..

Ответ №1:

Давайте разделим вашу задачу на две части

1. Загрузка XML-файла, содержащего путь к изображению

2. Чтение этого XML-файла и привязка элемента управления изображением к этому динамическому пути

Давайте перейдем к первому случаю:

1. Загрузка XML-файла, содержащего путь к изображению

здесь путь =http://server_adrs/XML_FILE

iso_path = путь внутри изолированного хранилища, в котором вы хотите сохранить XML-файл.

     public void GetXMLFile(string path)
    {
        WebClient wcXML = new WebClient();
        wcXML.OpenReadAsync(new Uri(path));
        wcXML.OpenReadCompleted  = new OpenReadCompletedEventHandler(wc);

    }

    void wc(object sender, OpenReadCompletedEventArgs e)
    {
        var isolatedfile = IsolatedStorageFile.GetUserStoreForApplication();
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(iso_path, System.IO.FileMode.Create, isolatedfile))
        {
            byte[] buffer = new byte[e.Result.Length];
            while (e.Result.Read(buffer, 0, buffer.Length) > 0)
            {
                stream.Write(buffer, 0, buffer.Length);
            }
            stream.Flush();
            System.Threading.Thread.Sleep(0);
        }            
    }
 

2. Чтение XML-файла и привязка элемента управления изображением к динамическому пути

здесь у меня есть список, в котором отображаются изображения, поэтому я использую функцию для привязки изображений к этому списку, как показано ниже.

     public IList<Dictionary> GetListPerCategory_Icon(string category, string xmlFileName)
    {
        using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (storage.FileExists(xmlFileName))
            {
                using (Stream stream = storage.OpenFile(xmlFileName, FileMode.Open, FileAccess.Read))
                {
                    try
                    {
                        loadedData = XDocument.Load(stream);
                        var data = from query in loadedData.Descendants("category")
                                   where query.Element("name").Value == category
                                   select new Glossy_Test.Dictionary
                                   {
                                        Image=GetImage((string)query.Element("iconpress")),//This is a function which will return Bitmap image

                                   };
                        categoryList = data.ToList();
                    }

                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString(), (((PhoneApplicationFrame)Application.Current.RootVisual).Content).ToString(), MessageBoxButton.OK);
                        return categoryList = null;
                    }
                }
            }
        }

        return categoryList;
    }
 

и вот определение для вышеуказанной функции

      public BitmapImage GetImage(string imagePath)
    {
        var image = new BitmapImage();
        imagePath = "/Glossy"   imagePath;
        using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (storage.FileExists(imagePath))
            {
                using (Stream stream = storage.OpenFile(imagePath, FileMode.Open, FileAccess.Read))
                {                       
                    image.SetSource(stream);                        

                }
            }
        }
        return image;
    }
 

Ответ №2:

вы можете использовать WebClient для извлечения xml с сервера, а затем сохранить его как XDocument при обратном вызове.