C# 如果以某种方式声明XmlTextWriter,则命名空间重新定义异常
我正在构建一个XDocument,并使用以下代码将其序列化为UTF8字符串:C# 如果以某种方式声明XmlTextWriter,则命名空间重新定义异常,c#,xml,linq-to-xml,xmlwriter,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
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我通过将名称空间添加到XDocument中根元素的名称中,解决了这个问题。不过,奇怪的是,如果使用“newXMLTextWriter()”而不是“XmlTextWriter.Create()”或“XmlWriter.Create()”,则不需要这样做
Jordon我不知道问题的原因,但不要使用“new XmlTextWriter()”。自.NEt 2.0以来,它一直被弃用。改用XmlWriter.Create。事实上,不要使用XmlTextWriter。也不要创建。