#c# #xml
#c# #xml
Вопрос:
У меня есть два XML-документа (doc1.xml и doc2.xml )
Я хочу скопировать содержимое объединения из doc1.xml и doc2.xml в новом файле, но я хочу исключить две строки.
Оба doc1.xml и doc2.xml имеет аналогичную структуру:
<a>
<b>
<c>
</c>
</b>
</a>
Я хочу скопировать xml из одного файла во второй файл, чтобы создать новый файл, НО я хочу исключить первый узел (строку) одного из документов, чтобы выглядеть следующим образом:
<a>
<b>
<c>
</c>
</b>
<b>
<c>
</c>
</b>
</a>
Моя проблема в том, что я получаю документ, который выглядит как:
<a>
<b>
<c>
</c>
</b>
</a>
<a>
<b>
<c>
</c>
</b>
</a>
Мой пример кода:
XmlDocument doc1 = new XmlDocument();
doc1.Load("book.xml");
XmlDocument doc2 = new XmlDocument();
doc2.Load("alsobook.xml");
XmlNode copiedNode = doc2.ImportNode(doc1.SelectSingleNode("/A"), true);
doc2.DocumentElement.AppendChild(copiedNode);
XmlNodeList nodes = doc2.SelectNodes("/A/A");
for (int i = 0; i < nodes.Count ; i)
{
nodes[i].RemoveChild(nodes[i])
}
string fileName = @"C:UsersAdministratorsourcereposStyleProfileTestStyleProfileTestbinMyNewFile.xml";
if (!File.Exists(fileName))
{
doc2.Save(fileName);
}
Комментарии:
1. Для вашей задачи лучше использовать LINQ to XML.
Ответ №1:
Проверьте это.
c #, LINQ to XML
void Main()
{
const string doc1 = @"e:TempDoc1.xml";
const string doc2 = @"e:TempDoc2.xml";
const string doc3 = @"e:TempDoc3.xml";
XDocument xdoc1 = XDocument.Load(doc1);
XDocument xdoc2 = XDocument.Load(doc2);
var xelem = xdoc1.Descendants("b");
xdoc2.Root.AddFirst(xelem);
xdoc2.Save(doc3);
}
Ответ №2:
Вы действительно не хотите использовать низкоуровневое кодирование DOM для такого рода вещей.
В XSLT это просто:
<a xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:copy-of select="document('doc1.xml')//b"/>
<xsl:copy-of select="document('doc2.xml')//b"/>
</a>
Комментарии:
1. Я полностью согласен, что XSLT лучше подходит для таких задач.