WP7 Read Write Xml в изолированном хранилище - PullRequest
5 голосов
/ 24 марта 2012

Я новичок в WP7.Я следовал этому учебнику, чтобы читать и писать XML-файл, но когда я читаю XML-файл, он показывает только верхнюю строку XML-файла. Я не знаю, как проверить, правильно ли написан XML-файл.программой. Так.

1.Где проверить файлы xml, сохраненные в изолированном хранилище.

2.Как выйти из этой проблемы.

Мойкод для записи XML-файла в изолированное хранилище:

      using (IsolatedStorageFile myIsolatedStorage =     
                            IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("mz1.xml", FileMode.Create, myIsolatedStorage))
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                using (XmlWriter writer = XmlWriter.Create(isoStream, settings))
                {
                    writer.WriteStartDocument();

                    writer.WriteStartElement("person");
                    writer.WriteElementString("node1", "value1");
                    writer.WriteEndElement();
                    writer.WriteEndDocument();
                    writer.Flush();
                }
            }
        }

код для чтения XML-файла из изолированного хранилища:

          using (IsolatedStorageFile myIsolatedStorage =          
                               IsolatedStorageFile.GetUserStoreForApplication())
            {
                IsolatedStorageFileStream isoFileStream =  
                         myIsolatedStorage.OpenFile("mz1.xml", FileMode.Open);
                using (StreamReader reader = new StreamReader(isoFileStream))
                {
                    textBlock1.Text= reader.ReadToEnd();
                }
            }

Вывод:

     <?xml version="1.0" encoding="utf-8"?>

Ответы [ 3 ]

6 голосов
/ 24 марта 2012

В ответ на ваш первый вопрос вы можете скачать и установить WP7 Isolated Storage Explorer из codeplex здесь: http://wp7explorer.codeplex.com/

Его действительно просто использовать.Просто добавьте пару строк кода в ваш app.xaml.cs и все готово.

Что касается вашего второго вопроса, код, который у вас есть, выглядит нормально.Недавно я написал небольшое приложение для WP7, которое также занималось подобными вещами.Вот часть этого кода:

public List<Task> GetTasks()
{
    var tasks = new List<Task>();
    using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (store.FileExists(XmlFile))
        {
            //store.DeleteFile(XmlFile);
            //XDocument doc = XDocument.Load(store.OpenFile(XmlFile, FileMode.Open));
            using (var sr = new StreamReader(new IsolatedStorageFileStream(XmlFile, FileMode.Open, store)))
            {
                XDocument doc = XDocument.Load(sr);
                tasks = (from d in doc.Descendants("task")
                         select new Task
                                    {
                                        Category = (string) d.Attribute("category"),
                                        Id = (string) d.Attribute("id"),
                                        Name = (string) d.Element("name"),
                                        CreateDate = (DateTime) d.Element("createdate"),
                                        DueDate = (DateTime) d.Element("duedate"),
                                        IsComplete = (bool) d.Element("isComplete")
                                    }).ToList<Task>();
            }
        }
    }
    return tasks;
}

на ваше усмотрение, но вы можете рассмотреть возможность использования LinqToXml.ИМХО это немного чище.

На самом деле у меня есть пост в блоге, где все это размещено здесь:

http://www.ritzcovan.com/2012/02/building-a-simple-windows-phone-apppart-2/

и вы можете скачать весь кодтакже.Я надеюсь, что вы найдете это полезным.

2 голосов
/ 24 марта 2012

Ваш код выполняется и работает нормально.Я изменил результат, который должен быть установлен не в TextBlock, а в строковую переменную, и он выдает следующее:

<?xml version="1.0" encoding="utf-8"?>
<person>
  <node1>value1</node1>
</person>

Я думаю, TextBlock просто показывает первую строку результатов.

1 голос
/ 24 марта 2012

вы ищете что-то вроде этого?

...