Как редактировать XML-файл в приложении Windows Phone 7.1 - PullRequest
0 голосов
/ 25 февраля 2012

Я пытаюсь сохранить пользовательские данные в XML-файл на Windows Phone (7.1).В этом процессе я открываю существующий файл XML, вставляю новый узел и затем пытаюсь сохранить файл XML.Хотя код работает без ошибок в Visual Studio 2010, изменения не вносятся в файл.Я подозреваю, что проблема в том, что код сохраняет файл в другом месте.Я попытался создать XMLWriter с помощью команды создания XDocument с путем заполнения пути к файлу в качестве входного параметра, но поддерживаемая версия System.XML.Linq (2.0.5) в системе Windows Phone этого не позволяет.

Код выглядит следующим образом:

            public void AddSwimGoal(SwimGoal SG)    
    {
        string FileName = "Data/SwimGoals.xml";
        XDocument Doc = new XDocument();
        Doc = XDocument.Load(@FileName);

        XElement Root = Doc.Root;
        XElement NewSG = new XElement("SwimGoal");
        XAttribute Dist = new XAttribute("Distance", SG.Distance);
        XAttribute MaxTD = new XAttribute("MaxTrainingDistance", SG.MaxTrainingDistance);
        XAttribute ID = new XAttribute("ID", SG.ID);
        XAttribute Name = new XAttribute("Name", SG.Name);
        XAttribute StartDate = new XAttribute("StartDate", SG.StartDate);
        XAttribute EndDate = new XAttribute("EndDate", SG.EndDate);
        XAttribute DesiredTime = new XAttribute("DesiredTime", SG.Desiredtime);
        XAttribute Stroke = new XAttribute("Stroke", SG.Stroke);
        NewSG.Add(Dist, MaxTD, ID, Name, StartDate, EndDate, DesiredTime, Stroke);
        Root.Add(NewSG);
        XmlWriter Wr = Doc.CreateWriter();
        Doc.Save(Wr);
    }

Ответы [ 2 ]

0 голосов
/ 23 мая 2012

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

0 голосов
/ 25 февраля 2012

Это код, который я использовал для сохранения своего XML в изолированном хранилище. Вы можете быть правы, думая, что это спасает его где-то еще. Следующее может решить эту проблему.

                private void saveXML()
                {
                    using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        IsolatedStorageFileStream stream = store.OpenFile("myapp.Xml", FileMode.Create, FileAccess.Write);
                        _xdoc.Save(stream);
                        stream.Dispose();
                    }
                }

Попробуйте изменить способ добавления элементов в ваш XML-файл:

                            _xdoc = new XDocument(
                                    new XComment("Created " + DateTime.Now.ToLongTimeString()),
                                    new XElement("a",
                                    new XElement("b",
                                    new XElement("c", this.tb_vehicleName.Text.ToString(), new XAttribute("id", 123)),
                                    new XElement("d", ""))));
...