2014-10-22 5 views
0

Я использовал следующие SO, How to merge two XmlDocuments in C#, чтобы объединить два примера XML-файлов в один. По существу, здесь мои два XML-файлыКомбинировать два xml_docs C# xmlDocument

test1.xml:

<root> 
    <Name> 
     <id>4</id> 
     <First_name>Tony</First_name> 
     <last_name>""</last_name> 
    </Name> 
    <Name> 
     <id>6</id> 
     <First_name>Donny</First_name> 
     <last_name>Test</last_name> 
     <middle_name>Ward</middle_name> 
    </Name> 
</root> 

И test2.xml

<root> 
    <Name> 
     <id>1</id> 
     <First_name>Nick</First_name> 
     <last_name>Tester</last_name> 
    </Name> 
    <Name> 
     <id>2</id> 
     <First_name>Lauren</First_name> 
     <last_name>MsTester</last_name> 
    </Name> 
</root> 

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

Код:

XmlDocument xmlreader1 = new XmlDocument(); 
xmlreader1.Load("C:\\Temp\\test1.xml"); 
XmlDocument xmlreader2 = new XmlDocument(); 
xmlreader2.Load("C:\\Temp\\test2.xml"); 

foreach (XmlNode node in xmlreader2.DocumentElement.ChildNodes) 
{ 
    XmlNode importedDocument = xmlreader1.ImportNode(node, true); 
    xmlreader1.DocumentElement.AppendChild(importedDocument); 
} 

Я считаю, что это правильно принимать каждый дочерний узел корня (в данном случае <name>) из test2.xml и добавить его в test1.xml. Я также пробовал в качестве:

XmlNode importedDocument = xmlreader1.ImportNode(xmlreader2.DocumentElement, true); 
xmlreader1.DocumentElement.AppendChild(importedDocument); 

с другой стороны никаких дополнительных предложений было бы весьма полезно.

+0

Вам особенно нужно * использовать 'XmlDocument'? LINQ to XML, как правило, проще в использовании. Кроме того, пожалуйста, позаботьтесь о форматировании своего сообщения - посмотрите предварительный просмотр и отправьте только, когда вопрос будет выглядеть так, как вы хотите, чтобы он выглядел, если вы пытаетесь ответить на него. –

ответ

0

Это не совсем понятно, что объединить операции, которые необходимо выполнить, - но если вы просто необходимо скопировать дочерние элементы корневого узла, в который очень просто с помощью LINQ к XML:

XDocument doc1 = XDocument.Load("test1.xml"); 
XDocument doc2 = XDocument.Load("test2.xml"); 
doc1.Root.Add(doc2.Root.Elements()); 
doc1.Save("test3.xml"); 

Это не будет выполнять любой фактический слияние, хотя - если у вас есть элементы с одинаковым идентификатором в обоих файлах, в итоге вы получите оба элемента в результате, а не один объединенный элемент.

Лично я всегда предпочитаю использовать LINQ to XML поверх старого API XmlDocument. Я бы настоятельно рекомендую использовать его, когда у вас есть такая возможность.

Смежные вопросы