Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить данные в XML, Помогите плиз 
:(
    Опции темы
Alexstudent
Дата 17.5.2013, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2013

Репутация: нет
Всего: нет



Добрый вечер.
В программировании достаточно недавно и столкнулся с таким вопросом, может он конечно элементарный, но вразумительного ответа не могу найти:(
в общем вот в чем проблема, имеется List<T> и данные с него необходимо дополнить в имеющийся XML файл (не затирая имеющихся там данных).
Вот XML файлик:
Код


<?xml version="1.0" encoding="utf-8" ?>
<Weather>
  <day>
    <date> 10 января 2013 </date>
    <temperature> -10 </temperature>
    <terms> небольшая облачность </terms>
    <temperatureNight> -15 </temperatureNight>
    <termsNight> сплошная облачность </termsNight>
  </day>
<Weather>


в C# пробовал следующие варианты
1. 

Код

public void SaveInXMLFile(List<T> AddListItem)
{
XmlDocument doc = new XmlDocument();
 doc.LoadXml("<day>"+
             "<date> 15 января 2013 </date>"+
            "<temperature> -10 </temperature>"+
            "<terms> небольшая облачность </terms>"+
            "<temperatureNight> -15 </temperatureNight>"+
            "<termsNight> сплошная облачность </termsNight>"+"</day>");
            XmlNode root = doc.DocumentElement;
            XmlElement elem = doc.CreateElement("day");
            root.AppendChild(elem);
            doc.Save(@"c:\Programm\FileName.xml");
}


в данном случае просто перезаписывает:( и в XML файле даже строка <?xml version="1.0" encoding="utf-8" ?> пропадает
2.
Код


 FileStream fs = new FileStream(@"c:\Programm\FileName.xml",
                FileMode.OpenOrCreate, FileAccess.ReadWrite,   
                FileShare.ReadWrite);
            XmlDocument _doc = new XmlDocument();
            _doc.Load(fs);
            XmlElement day = _doc.CreateElement("day");

            XmlElement date = _doc.CreateElement("date");
            date.InnerText = "18 января 2013";
            day.AppendChild(date);

            XmlElement temperature = _doc.CreateElement("temperature");
            temperature.InnerText = "-20";
            day.AppendChild(temperature);

            XmlElement terms = _doc.CreateElement("terms");
            terms.InnerText = "небольшая облачность";
            day.AppendChild(terms);

            XmlElement temperatureNight = _doc.CreateElement("temperatureNight");
            temperatureNight.InnerText = "-20";
            day.AppendChild(temperatureNight);

            XmlElement termsNight = _doc.CreateElement("termsNight");
            termsNight.InnerText = "небольшая облачность";
            day.AppendChild(termsNight);
            _doc.DocumentElement.AppendChild(day);
            fs.Close();


вообще ничего не происходит:((
В вышеуказанных вариантах я уже в метод не передавал LIst<T>, а уже на прямую данные пытался записать чтобы быстрее было.
Все эти варианты брал с разных форумов, пробовал там еще штуки три, но эфект почти такой или затирает или ничего.
Люди подскажите пожалуйста, а то уже башня взрывается:(. И если не сложно подскажите где это можно более подробно почитать:) 
За ранее спасибо:)
PM MAIL   Вверх
diadiavova
Дата 17.5.2013, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Alexstudent @  17.5.2013,  22:56 Найти цитируемый пост)
в данном случае просто перезаписывает

В каком смысле перезаписывает? Судя по коду у тебя должен получиться документ с корневым элементом day и в конце, самым последним его ребенком должен быть вставленный тобой day. Если ты ждешь, что корневым элементом будет whether, то его надо сначала загрузить, а в коде этого не видно.
Цитата(Alexstudent @  17.5.2013,  22:56 Найти цитируемый пост)
 и в XML файле даже строка <?xml version="1.0" encoding="utf-8" ?> пропадает

Она не пропадает. Ее там просто нет. В какой части кода ты ее вписал? smile Вместо doc.LoadXml, напиши doc.Load(<имя файла>), дальше добавляй с помощью AppendChild


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Alexstudent
Дата 17.5.2013, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2013

Репутация: нет
Всего: нет



Перезаписывает в смысле исчезает то, что было в файле и записывается новая информация, та которая по коду:(
Цитата

 Вместо doc.LoadXml, напиши doc.Load(<имя файла>), дальше добавляй с помощью AppendChild 

во втором же варианте вроде так и написано или я не так что то понимаю?
спасибо что откликнулись, правда уже мозг взрывается..уже и мысля замылилась, еле думает:(
PM MAIL   Вверх
diadiavova
Дата 18.5.2013, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Alexstudent @  18.5.2013,  00:50 Найти цитируемый пост)
во втором же варианте вроде так и написано или я не так что то понимаю?

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

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  AddXmlElement1.rar 46,98 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Alexstudent
Дата 18.5.2013, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2013

Репутация: нет
Всего: нет



Спасибо огромное. Уже вот сижу изучаю:)правда возникло несколько вопросов:
1.
Код

Action<string, string> addEl = (name, content) =>
            {
                var newel = doc.CreateElement(name);
                newel.AppendChild(doc.CreateTextNode(content));
                day.AppendChild(newel);
            };

не подскажите что это за такой метод и в какой книге можно про него почитать, просто с такой записью впервые встречаюсь:(
2. 
Код

 using (StringWriter sw = new StringWriter(sb1))
            {
                doc.Save(sw);
            }

в данном случае слово using обязательно? или запись:
Код

StringWriter sw = new StringWriter(sb1)
doc.Save(sw)

будет идентична?
3. Все выводит хорошо, на консоль и правильно, но вопрос почему не меняет сам файл XML:(
PM MAIL   Вверх
diadiavova
Дата 18.5.2013, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Alexstudent @  18.5.2013,  09:59 Найти цитируемый пост)
не подскажите что это за такой метод и в какой книге можно про него почитать, просто с такой записью впервые встречаюсь:(

В мсдн почитай о лямба-выражениях. В данном случае просто надо было выполнять несколько раз одни и те же действия, поэтому немного обобщил и вынес добавление элементаив дэй в отдельную функцию. Если непонятно как это работает, то можно сделать в ручную или создать отдельный метод.
Цитата(Alexstudent @  18.5.2013,  09:59 Найти цитируемый пост)
в данном случае слово using обязательно? или запись:

Без него сё дудет работать так же, а вот зачем оно нужно - читай в мсдн.
Цитата(Alexstudent @  18.5.2013,  09:59 Найти цитируемый пост)
Все выводит хорошо, на консоль и правильно, но вопрос почему не меняет сам файл XML:(

Потому что я не сохранял в файл. Убери из моего кода стрингбилдеры, райтеры и вывод на консоль, а методу Save передай имя файла для сохранения и всё изменится, просто вместо файла я сохранил стринграйтер, он записал в стрингбилдер. Можно так же вместо стринграйтера использовать стримрайтер и можно будет записать в том числе и в файл. Но это всё уже вопросы немного из другой сферы.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Alexstudent
Дата 18.5.2013, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2013

Репутация: нет
Всего: нет



а и еще по второму моему варианту, с целью сохранения добавляю _doc.Save(fs), вот что то такое:
Код

FileStream fs = new FileStream(@"c:\Programm\FileName.xml",
                FileMode.OpenOrCreate, FileAccess.ReadWrite,   
                FileShare.ReadWrite);
            XmlDocument _doc = new XmlDocument();
            _doc.Load(fs);
            XmlElement day = _doc.CreateElement("day");
            XmlElement date = _doc.CreateElement("date");
            date.InnerText = "18 января 2013";
            day.AppendChild(date);
            XmlElement temperature = _doc.CreateElement("temperature");
            temperature.InnerText = "-20";
            day.AppendChild(temperature);
            XmlElement terms = _doc.CreateElement("terms");
            terms.InnerText = "небольшая облачность";
            day.AppendChild(terms);
            XmlElement temperatureNight = _doc.CreateElement("temperatureNight");
            temperatureNight.InnerText = "-20";
            day.AppendChild(temperatureNight);
            XmlElement termsNight = _doc.CreateElement("termsNight");
            termsNight.InnerText = "небольшая облачность";
            day.AppendChild(termsNight);
            _doc.DocumentElement.AppendChild(day);
            _doc.Save(fs);
            fs.Close();

сохранять то сохраняет но файл приобретает вид:
Код

<?xml version="1.0" encoding="utf-8" ?>
<Weather>
  <day>
    <date> 10 января 2013 </date>
    <temperature> -10 </temperature>
    <terms> небольшая облачность </terms>
    <temperatureNight> -15 </temperatureNight>
    <termsNight> сплошная облачность </termsNight>
  </day><?xml version="1.0" encoding="utf-8"?>
<Weather>
  <day>
    <date> 10 января 2013 </date>
    <temperature> -10 </temperature>
    <terms> небольшая облачность </terms>
    <temperatureNight> -15 </temperatureNight>
    <termsNight> сплошная облачность </termsNight>
  </day>
  <day>
    <date>18 января 2013</date>
    <temperature>-20</temperature>
    <terms>небольшая облачность</terms>
    <temperatureNight>-20</temperatureNight>
    <termsNight>небольшая облачность</termsNight>
  </day>
</Weather>

подскажите пожалуйста, хотелось бы уже окончательно разобраться по данному вопросу:)
PM MAIL   Вверх
Alexstudent
Дата 18.5.2013, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.5.2013

Репутация: нет
Всего: нет



Спасибо огромное:) все шикарно работает:) буду насчет лямбда выражений и юзингов читать мат часть:)
PM MAIL   Вверх
diadiavova
Дата 18.5.2013, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Alexstudent, по поводу неправильного сохранения, у тебя ошибка в самом документе, там в конце вместо закрывающего тега - открывающий. Слеш забыл поставить.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.