Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
2 / 2 / 2
Регистрация: 11.02.2010
Сообщений: 252

Не получатся записать данные из нескольких xml файлов в один

13.01.2011, 06:53. Показов 3285. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте , подскажите пожалуйста как можно переписать данные из нескольких xml файлов в один. Я пишу так но он ничего не копирует
у меня там есть 4 xml файла которые называются 1.xml 2.xml 3.xml 4.xml
и в результате их узлы доожны переписаться в файл ForParse.xml , но ничего не переписывается
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mlDocument overallDoc= new XmlDocument();
            overallDoc.Load("ForParse.xml");
            XmlNode root= overallDoc.DocumentElement;
            List<string> myListFiles = new  List<string>();
            for (int i = 1; i <= 4; i++)
            {
                myListFiles.Add(i.ToString()+".xml");
            }
            foreach(string path in myListFiles)
            {
                XmlDocument currDoc=new XmlDocument();
                currDoc.Load(path);
                for (int j=0;j<=currDoc.DocumentElement.ChildNodes.Count;j++)
                {
                    XmlNode newNode = overallDoc.ImportNode(currDoc.DocumentElement.NextSibling,true);
                    
                    
                }
            }
Добавлено через 10 часов 38 минут
Переделал , но он всеравно какую то чушь копирует
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 XmlDocument overallDoc = new XmlDocument();
            overallDoc.LoadXml(File.ReadAllText("ForParse.xml"));
            XmlNode root = overallDoc.DocumentElement;
            List<string> myListFiles = new List<string>();
            for (int i = 1; i <= 4; i++)
            {
                myListFiles.Add(i.ToString() + ".xml");
            }
            foreach (string path in myListFiles)
            {
                XmlDocument currDoc = new XmlDocument();
                currDoc.LoadXml(File.ReadAllText(path));
                XmlNodeList rows = currDoc.GetElementsByTagName("ROW".Trim());
                foreach (XmlNode x in rows)
                {
                    overallDoc.ImportNode(x, true);
                    foreach (XmlNode xc in x.ChildNodes)
                    {
                        overallDoc.ImportNode(xc, true);
                    }
                }
 
            }
            FileStream mySaveStream = new FileStream("ForParse.xml", FileMode.Append); 
            overallDoc.Save(mySaveStream);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2011, 06:53
Ответы с готовыми решениями:

Объединение нескольких XML файлов в один с группировкой, используя XSLT
Всем привет. Помогите разобраться в следующей задаче: есть несколько XML файлов, в которых хранятся данные каждого из отчета...

Данные из нескольких TextBox записать в один результирующий
помогите, нужно программу в которой можно записывать данные с text1.text-text6.text и вывод всего в text7.text и еще для более удобного...

Перенести данные из нескольких файлов в один
Вопрос таков. Есть несколько таблиц в разных файлах. Мне нужно данные этих таблиц из 3-4 столбцов перекинуть по артикул в один файл. ВПР...

13
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 14:08
всё должно быть проще. ты что-то считываешь как-то странно. и записываешь ещё странней ))

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var firstFile = "1.xml";
            var secontFile = "2.xml";
            var commonFile = "3.xml";
 
            var first = new XmlDocument();
            first.Load(firstFile);
            var second = new XmlDocument();
            second.Load(secontFile);
            var common = new XmlDocument();
 
            if (first.DocumentElement == null) return;
            var firstChilds = first.DocumentElement.ChildNodes;
 
            if (second.DocumentElement == null) return;
            var secondChilds = second.DocumentElement.ChildNodes;
 
            var docNode = common.CreateXmlDeclaration("1.0", "UTF-8", null);
            common.AppendChild(docNode);
            var root = common.CreateElement(first.DocumentElement.Name);
            common.AppendChild(root);
            
 
            foreach (var node in from XmlNode node2Cp in firstChilds select common.ImportNode(node2Cp, true))
                common.DocumentElement.AppendChild(node);
 
            foreach (var node in from XmlNode node2Cp in secondChilds select common.ImportNode(node2Cp, true))
                common.DocumentElement.AppendChild(node);
 
            common.Save(commonFile);
2
2 / 2 / 2
Регистрация: 11.02.2010
Сообщений: 252
13.01.2011, 14:46  [ТС]
Это не проканает я на втором фрэимворке пишу , а там линк ту Xml нет нужно как то по другому
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 14:59
вот без LINQ

Код C#
foreach (var node2Cp in firstChilds)
{
node =common.ImportNode(node2Cp, true);
common.DocumentElement.AppendChild(node) ;
}


а LINQ2XML не использовал


Добавлено через 9 минут
timur2008,но во втором фрэймворке может чего-нибудь ещё из функций не хватать. предупреждать надо )) но вроде ты не жалуешься ))
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.01.2011, 15:08
servitola, второй фрэимворк также не поддерживает ключевое слово var
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 15:12
timur2008, да, точно, раньше его не было.
но я думаю это не сложно исправить:
в 3 случаях на string, в 3 на XmlDocument, в остальных на XmlNode
0
2 / 2 / 2
Регистрация: 11.02.2010
Сообщений: 252
13.01.2011, 15:28  [ТС]
о спасибо , щас попробуем так сделать
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 15:35
timur2008,тут я не объявил переменную. ну так. на всякий случай
Код C#
foreach (var node2Cp in firstChilds)
{
XmlNode node =common.ImportNode(node2Cp, true);
common.DocumentElement.AppendChild(node) ;
}
0
2 / 2 / 2
Регистрация: 11.02.2010
Сообщений: 252
13.01.2011, 15:44  [ТС]
Да я вроде бы так и сделал но он выбрасывает исключение В экземпляре объекта не задана ссылка на объект.
Как раз на строчку common.DocumentElement.AppendChild(node) ;
я вот так вот сделал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
XmlDocument first = new XmlDocument();
            first.Load(firstFile);
            XmlDocument second = new XmlDocument();
            second.Load(secondFile);
            XmlDocument common = new XmlDocument();
            if (first.DocumentElement == null) return;
            XmlNodeList firstChild = first.DocumentElement.ChildNodes;
 
            if (second.DocumentElement == null) return;
            XmlNodeList secondChild = second.DocumentElement.ChildNodes;
 
            XmlNode docNode = common.CreateXmlDeclaration("1.0", "UTF-8",null);
            common.AppendChild(docNode);
            XmlNode root = common.CreateElement(first.DocumentElement.Name);
            foreach (XmlNode node2Cp in firstChild)
            {
                XmlNode node = common.ImportNode(node2Cp,true);
                common.DocumentElement.AppendChild(node);
            }
            foreach (XmlNode node3Cp in secondChild)
            {
                XmlNode node = common.ImportNode(node3Cp,true);
                common.DocumentElement.AppendChild(node);
            }
Начинаются все xml так (по сути это один файл просто с разными именами, на работе у них будут разные данные а пока так сделал чтобы не париться )
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="ISO-10646-UCS-2" standalone="yes" ?>
<!DOCTYPE ROOT[
 <!ATTLIST ROOT DATE_CREATED CDATA #REQUIRED>
 <!ATTLIST ROOT CREATED_BY CDATA #REQUIRED>
 <!ELEMENT username (#PCDATA)>
 <!ELEMENT LockoutTime (#PCDATA)>
 <!ELEMENT ROW (username, LockoutTime)>
 <!ELEMENT ROOT (ROW*)>
]>
<ROOT DATE_CREATED="2011-01-12 08:26:45" CREATED_BY="Microsoft Log Parser V2.2">
 <ROW>
  <username>
  </username>
  <LockoutTime>
  2010-10-29 16:01:22
  </LockoutTime>
 </ROW>
 <ROW>
  <username>
  </username>
  <LockoutTime>
  2010-10-29 16:01:23
  </LockoutTime>
 </ROW>
 <ROW>
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 15:48
timur2008, ты потерял строчку
common.AppendChild(root);

это нужно вставить сразу после задания элемента XmlNode root.
мы тут создаём корневой node для обещего XmlДокумента. я тут взял на себя смелость брать его название таким же как в первом файле.
0
2 / 2 / 2
Регистрация: 11.02.2010
Сообщений: 252
13.01.2011, 15:56  [ТС]
Да верно , извиняюсь , есть . только теперь вопрос как его сохранить , я вот так делаю
C#
1
2
FileStream mySaveStream = new FileStream("3.xml", FileMode.Create);
common.Save(mySaveStream);
Но он почему то сохраняет его как файл с нулевым размером
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 16:02
timur2008, поставь брэйкпоинт и посмотри что там в common хранится у тебя. у меня всё работает. не знаю почему.
0
2 / 2 / 2
Регистрация: 11.02.2010
Сообщений: 252
13.01.2011, 16:07  [ТС]
Мм спасибо , щас копирует я там убрал из кода
C#
1
2
//XmlNode docNode = common.CreateXmlDeclaration("1.0", "UTF-8",null);
            //common.AppendChild(docNode);
эти строки надеюсь что это все что надо , щас протестю на каком нибудь поменьше файле , Спасибо за помощь Да все клево работает
0
 Аватар для servitola
60 / 60 / 6
Регистрация: 07.09.2010
Сообщений: 259
13.01.2011, 16:12
timur2008,странно, что этот кусок валится. Не за что.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.01.2011, 16:12
Помогаю со студенческими работами здесь

Собрать данные из нескольких файлов в один
Добрый день! Уважаемые хакеры нужна ваша помощь. Проблема: есть папка в которой находятся 500 excel файлов участник1,...

Как собрать данные из нескольких файлов в один
Доброго времяни суток! Помогите плиз Ламеру, сломал голову. Есть задача собрать данные (2 столбца) из более чем двухсот файлов Excel в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru