Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Объеденить два XML файла


Автор: SmartBye 4.6.2008, 22:31
Есть программа, которая парсит XML файл, через XSLT. В работе парсера я не очень разобрался, так что у меня такой вопрос:

Нужно как-то объеденить два XML файла с одинаковой структурой в один, просто дописать в конец. Я бы конечно просто их склеил, но у них там древовидная структура и для этого придется раскрывать верхний тег

Подскажите, как это сделать? Ну или, хотя бы, какими средствами.

Автор: Gelis 5.6.2008, 12:56
Код

//mainDomDocument  - документ в который добавляем ноды
XmlDocument mainDomDocument = new XmlDocument();
document.Load(stream);
// далее нужно выбрать нод в который собираемся добавлять дочерние из второго документа
//grouppedNode - имя этого нода
//otherNode - нод который достали из второго документа
XmlNode importedNode = mainDomDocument.ImportNode(otherNode, true);
grouppedNode.AppendChild(importedNode);

Автор: SmartBye 5.6.2008, 18:56
Не очень понял, как же все-таки это реализовать...
Сделал вот такой код, но он не работает. Пишет, что не в том контексте добавляемый нод находится.
Код

XmlDocument sys = new XmlDocument();
            sys.Load("systemitems.xml");
            XmlDocument user = new XmlDocument();
            user.Load("useritems.xml");
            XmlNodeList userList = user.ChildNodes;
            foreach (XmlNode node in userList)
            {
                sys.AppendChild(node);
            }
            sys.Save("compete.xml");

Документ такого типа: 
Код

<?xml version="1.0" encoding="utf-8" ?>
<Items>
<Item><Names><Name>Item #1</Name></Names><Price>Price #1</Price></Item>
<Item><Names><Name>Item #2</Name></Names><Price>Price #2</Price></Item>
<Item><Names><Name>Item #3</Name></Names><Price>Price #3</Price></Item>
<Item><Names><Name>Item #4</Name><Name>Item #5</Name></Names><Price>Price #4</Price></Item>
</Items>

Нужно к нему, к примеру, добавить все строки <Item></Item> из другого такого же документа.

Автор: Gelis 7.6.2008, 13:50
Обратите внимание на строчку
Код

XmlNode importedNode = mainDomDocument.ImportNode(otherNode, true);

Вот решение вашей проблемы
Код

XmlDocument sys = new XmlDocument();
            sys.Load("systemitems.xml");
            XmlDocument user = new XmlDocument();
            user.Load("useritems.xml");
            XmlNodeList userList = user.ChildNodes;
            foreach (XmlNode node in userList)
            {
                 XmlNode impotedNode =  sys.ImportNode(node,true);
                sys.AppendChild(importedNode);
            }
            sys.Save("compete.xml");

Автор: SmartBye 23.6.2008, 00:58
Спасибо. Будем пробовать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)