В частности, мне нужно вставить фрагменты XML, которые у меня есть в строковая форма внутри определенных узлов документа.
Для этого я создаю новый элемент, а затем устанавливаю свою XML-строку в его свойстве InnerXml, например:
Код: Выделить всё
using System.Xml;
string nsUri = "http://myorg/myns";
string baseDocument = @$"";
XmlDocument doc = new XmlDocument();
doc.LoadXml(baseDocument);
var nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace("default", nsUri);
var target = doc.CreateElement("Target", nsUri);
target.InnerXml= @"
This is a subnode
Here is another subnode
";
doc.DocumentElement.AppendChild(target);
doc.Save(@"C:\text.xml");
Код: Выделить всё
This is a subnode
Here is another subnode
Это само по себе уже проблема, но гораздо хуже то, что после этого документ оказывается в противоречивом состоянии, и дальнейшие манипуляции приводят к странным результатам. Например, если после этого я сделаю:
Код: Выделить всё
var sub1 = target.SelectSingleNode("default:Sub1", nsm);
Итак, очевидно, это неправильный способ сделать это, и проблема возникает, когда я переназначаю InnerXml. Можете ли вы рассказать мне, как правильно это сделать?
Некоторые примечания:
- Я знаю, что могу создавать элементы и атрибуты один за другим вместо того, чтобы просто выгружать строку XML внутри InnerXml, но фрагменты XML, которые мне нужно вставить, очень длинные, и было бы абсурдно вручную воссоздавать их в коде.
- Я попробовал сделать это с помощью XmlDocumentFragment, но результат тот же
Подробнее здесь: https://stackoverflow.com/questions/784 ... everything