Исключение переопределения пространства имен, если XmlTextWriter объявлен определенным образом - PullRequest
0 голосов
/ 23 февраля 2011

Я собираю XDocument и сериализую его в строку UTF8 со следующим кодом:

string xmlString = "";
using (MemoryStream ms = new MemoryStream())
{
  using (XmlWriter xw = new XmlTextWriter(ms, Encoding.UTF8))
  {
    doc.Save(xw);
    xw.Flush();
    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);
    xmlString = sr.ReadToEnd();
  }
}

Это сработало нормально.

Затем мне нужно было переключить, был ли декларатор сериализован в строку. Я изменил код на это:

string xmlString = "";
using (MemoryStream ms = new MemoryStream())
{
  XmlWriterSettings settings = new XmlWriterSettings()
  {
    OmitXmlDeclaration = !root.IncludeDeclarator,
    Encoding = Encoding.UTF8
  };
  using (XmlWriter xw = XmlTextWriter.Create(ms, settings))
  {
    doc.Save(xw);
    xw.Flush();
    StreamReader sr = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);
    xmlString = sr.ReadToEnd();
  }
}

Это вызывает следующее исключение в doc.Save (xw):

Префикс '' нельзя переопределить из '' в my_schema_here 'в том же тег начального элемента.

Я пытаюсь выяснить, почему XDoc можно сохранить, если писатель «новый», но не если он «.Create» d. Есть идеи?

Jordon

1 Ответ

0 голосов
/ 23 февраля 2011

Я исправил это, добавив пространство имен к имени корневого элемента в XDocument. Тем не менее, странно, что в этом нет необходимости, если вместо «XmlTextWriter.Create ()» или «XmlWriter.Create ()» используется «new XmlTextWriter ()».

Jordon

...