Томас ответил действительно здорово. Однако, хотя он отлично работал с данным XML, я обнаружил, что у него есть некоторые проблемы с XML с атрибутами (хотя код теоретически справляется с этим).
Однако эта строка выдает исключение InvalidCastException при попытке преобразования из XAttribute в XNode:
var nodes = attributes.Concat(elements).ToArray();
Тем не менее я обнаружил, что следующие изменения работают для меня. Вместо
var attributes = e2.Attributes().Union(e1.Attributes(), attrComparer).Cast<XNode>();
...
var nodes = attributes.Concat(elements).ToArray();
...
if (value != null)
return new XElement(e1.Name, nodes, value);
else
return new XElement(e1.Name, nodes);
Попробуйте это:
var attributes = e2.Attributes().Union(e1.Attributes(), attrComparer);
...
// var nodes = attributes.Concat(elements).ToArray();
...
if (value != null)
return new XElement(e1.Name, attributes, elements, value);
else
return new XElement(e1.Name, attributes, elements);
Кажется, работает на меня, хотя я не эксперт по этим вопросам. Это просто к сведению тех, кто сталкивается с этим.
РЕДАКТИРОВАТЬ: Кроме того, обратите внимание, что doc.Dump()
не существует для меня и разрывается при компиляции. Я использую .NET 3.5; возможно, ответ Тома зависел от другой версии (3.0?), и это могло также учитывать сообщения об ошибках, которые я получил?