如果以某种方式声明XmlTextWriter,则命名空间重新定义异常

时间:2011-02-23 18:14:08

标签: c# xml linq-to-xml xmlwriter

我正在构建一个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则不能。有什么想法吗?

乔丹

1 个答案:

答案 0 :(得分:0)

我通过将名称空间添加到XDocument中根元素的名称来修复此问题。但是,如果使用“new XmlTextWriter()”代替“XmlTextWriter.Create()”或“XmlWriter.Create()”,这是不必要的。

乔丹