Когда я читаю XML-файл с помощью XmlTextReader, мне иногда нужно сохранять данные на узле, а это дочерние элементы.Я делаю это с помощью XmlTextWriter (я не женат на этом подходе).
Проблема в том, что XmlTextReader знает о множестве пространств имен, которые этот фрагмент использует в префиксах на узлах и атрибутах, но не объявляет вэта точка была объявлена выше (обычно, но не всегда в корневом узле).
Я хорошо говорю XmlTextWriter обо всех пространствах имен, даже если некоторые не используются.
MyПервый вопрос: как мне лучше скопировать пространства имен?Я вызываю XmlTextReader.GetNamespacesInScope (какой параметр)?а затем один за другим вызывать XmlTextWriter.WriteAttributeString () для записи каждого пространства имен?
И если я делаю это таким образом, то достаточно ли XmlTextWriter умный, чтобы знать, что это объявления пространства имен и, следовательно, не переписывать их снова в дочернемузлы?
Во-вторых, если я использую XmlTextWriter.WriteAttributeString (localName, ns, value) для дополнительного пространства имен, входящего в область действия внутреннего узла, достаточно ли умен, чтобы добавить эти пространства имен?Или мне нужно явно добавить его с помощью XmlTextWriter.WriteAttributeString (префикс, URI)?
Основной код:
// this object is created, is reading XML, and hit a point below eventually...
XmlTextReader reader;
// ...
// On handling a specific XmlNodeType.Element
MemoryStream stream = new MemoryStream();
XmlTextWriter fragment = new XmlTextWriter(stream, utf8);
// What do I do here to get the namespaces in scope in reader into writer?