0

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

乔丹

4

1 回答 1

0

我通过将命名空间添加到 XDocument 中根元素的名称来解决此问题。不过,奇怪的是,如果使用“new XmlTextWriter()”而不是“XmlTextWriter.Create()”或“XmlWriter.Create()”,这不是必需的。

乔丹

于 2011-02-23T19:31:32.780 回答