我正在构建一个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则不能。有什么想法吗?
乔丹
答案 0 :(得分:0)
我通过将名称空间添加到XDocument中根元素的名称来修复此问题。但是,如果使用“new XmlTextWriter()”代替“XmlTextWriter.Create()”或“XmlWriter.Create()”,这是不必要的。
乔丹