Maciej Los
Ну, нет простого способа объединить xml-документы. Почему? Вы должны быть полностью уверены, что желаемый контент будет в порядке (в аспекте структуры и ценностей).
Позвольте мне объяснить это на следующем примере:
//content of doc #1
string xcontent1 = @"<root>
<Item id='1'>
<Subitems>
<Subitem sid='1'>A</Subitem>
<Subitem sid='2'>B</Subitem>
</Subitems>
</Item>
<Item id='2'>
<Subitems>
<Subitem sid='1'>A</Subitem>
<Subitem sid='2'>B</Subitem>
<Subitem sid='3'>C</Subitem>
</Subitems>
</Item>
</root>";
//content of doc #2
string xcontent2 = @"<root>
<Item id='1'>
<Subitems>
<Subitem sid='1'>A</Subitem>
<Subitem sid='2'>E</Subitem>
<Subitem sid='3'>F</Subitem>
</Subitems>
</Item>
<Item id='3'>
<Subitems>
<Subitem sid='1'>A</Subitem>
<Subitem sid='2'>B</Subitem>
<Subitem sid='3'>C</Subitem>
</Subitems>
</Item>
</root>";
//first document
XDocument xdoc1 = XDocument.Parse(xcontent1);
//second document
XDocument xdoc2 = XDocument.Parse(xcontent2);
//final document (merged)
XDocument xdst = new XDocument();
//add entire content of document #1
xdst.Add(xdoc1.Root);
//add content of document #2 without root
xdst.Root.Add(xdoc2.Root.Elements());
Результат объединенного документа:
<root>
<Item id="1">
<Subitems>
<Subitem sid="1">A</Subitem>
<Subitem sid="2">B</Subitem>
</Subitems>
</Item>
<Item id="2">
<Subitems>
<Subitem sid="1">A</Subitem>
<Subitem sid="2">B</Subitem>
<Subitem sid="3">C</Subitem>
</Subitems>
</Item>
<Item id="1">
<Subitems>
<Subitem sid="1">A</Subitem>
<Subitem sid="2">E</Subitem>
<Subitem sid="3">F</Subitem>
</Subitems>
</Item>
<Item id="3">
<Subitems>
<Subitem sid="1">A</Subitem>
<Subitem sid="2">B</Subitem>
<Subitem sid="3">C</Subitem>
</Subitems>
</Item>
</root>
Как вы можете видеть, объединенный xml-документ содержит 2
Item
узлы с одинаковыми
id
(1), но с другим содержанием (
Subitems
Есть одно правило, которое вы должны соблюдать:
Программисты должны быть мудрее пользователей. ;)
Вывод: вы должны предоставить метод, который будет проходить через коллекцию узлов (и их подузлы), чтобы иметь возможность сравнивать каждый узел с текущим импортированным узлом.
g.bhangu
привет, это дает исключение: данные на корневом уровне недопустимы. Строка 1, Позиция 1.plz help. у меня такая же проблема, что я хочу добавить элементы, но корневой узел должен быть таким же. в нем не было ни единого пролома.
Maciej Los
Вы хотите сказать, что хотите второй корневой элемент? Вам следует избегать этого, потому что вы получите неправильную структуру xml-данных. Без ssing вашего xml я не могу помочь. Пожалуйста, не публикуйте его содержание в комментариях. Сделайте мне и другим членам клуба одолжение и разместите свой вопрос на доске быстрых ответов, используя Спросите ссылка.