Я хочу объединить два XmlDocument
s, вставив второй XML-документ в конец существующего Xmldocument
в C#. Как это делается?Как слить два XmlDocuments в C#
ответ
Что-то вроде этого:
foreach (XmlNode node in documentB.DocumentElement.ChildNodes)
{
XmlNode imported = documentA.ImportNode(node, true);
documentA.DocumentElement.AppendChild(imported);
}
Обратите внимание, что это игнорирует сам элемент документа документа B, поэтому, если у него есть другое имя элемента или атрибуты, которые вы хотите скопировать, вам нужно будет точно определить, что вы хотите сделать.
EDIT: Если, как на ваш комментарий, вы хотите, чтобы встроить весь документ B в документе А, что относительно легко:
XmlNode importedDocument = documentA.ImportNode(documentB.DocumentElement, true);
documentA.DocumentElement.AppendChild(importedDocument);
Это будет по-прежнему игнорировать такие вещи, как XML-декларации документа B, если есть один - я не знаю, что произойдет, если вы попытаетесь импортировать сам документ как узел другого документа, и он включил объявление XML ... но я подозреваю, что это сделает то, что вы хотите ,
Плохие новости. До тех пор, пока документы xml могут иметь только один корневой элемент, вы не можете просто поместить содержимое одного документа в конец второго. Возможно, this - то, что вы ищете? Он показывает, как легко можно объединить XML-файлы с помощью Linq к XML
В качестве альтернативы, если вы используете XmlDocuments вы можете попробовать сделать это следующим образом:
XmlDocument documentA;
XmlDocument documentB;
foreach(var childNode in documentA.DocumentElement.ChildNodes)
documentB.DocumentElement.AppendChild(childNode);
Я хочу добавить b XmlDocument как узел Xmldocument –
Вставка всего документа XML в конце другого документа XML фактически гарантирует получение недопустимого XML. XML требует наличия одного и только одного элемента «document». Таким образом, если предположить, что ваши файлы были следующими:
a.xml
<document>
<element>value1</element>
<element>value2</element>
</document>
B.xml
<document>
<element>value3</element>
<element>value4</element>
</document>
Результирующий документ, просто добавив один в конце прочие:
<document>
<element>value1</element>
<element>value2</element>
</document>
<document>
<element>value3</element>
<element>value4</element>
</document>
Недопустимый XML.
Предполагая, вместо того, что эти два документа имеет общий элемент документа, и вы хотите вставить ребенок документа элемента из B в элемент документа А, вы можете использовать следующее:
var docA = new XmlDocument();
var docB = new XmlDocument();
foreach (var childEl in docB.DocumentElement.ChildNodes) {
var newNode = docA.ImportNode(childEl, true);
docA.DocumentElement.AppendChild(newNode);
}
Этих подготовит следующий документ, приведенный выше, мои примеры:
<document>
<element>value1</element>
<element>value2</element>
<element>value3</element>
<element>value4</element>
</document>
с помощью System.Xml – MacGyver
Это самый быстрый способ слияния xml-документов.
XElement xFileRoot = XElement.Load(file1.xml);
XElement xFileChild = XElement.Load(file2.xml);
xFileRoot.Add(xFileChild);
xFileRoot.Save(file1.xml);
Я попытался изменить ваш вопрос, чтобы сделать его более понятным. Надеюсь, я не изменил смысл того, что вы пытались спросить. –
Thanx. Я нашел решение без цикла: XmlNode footerNode = a.CreateElement ("ADD"); footerNode.InnerXml = b.SelectSingleNode ("/ root"). InnerXml; a.DocumentElement.AppendChild (footerNode); –
Обратите внимание: этот сайт не является сервисом написания кода. Если вы задали свой вопрос, чтобы описать, что вы пробовали, так что далеко и где вы застряли, тогда мы можем попытаться помочь с конкретными проблемами . Вы также должны прочитать [ask]. –