我正在将对象的 XML 序列化文件写入由 validator.MatchPossouslyValid(string input)
方法生成的文件。第一次调用,序列化并写入文件。但是,第二次调用失败并出现异常:System.InvalidOperationException:'状态 EndRootElement 中的 token StartElement 将导致无效的 XML 文档。如果要编写 XML 片段,请确保将 ConformanceLevel 设置设置为 ConformanceLevel.Fragment 或 ConformanceLevel.Auto。 '
XmlSerializerNamespaces emptyNS = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var serializer = new XmlSerializer(typeof(PDPCustomerInfoInvalid));
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
//settings.Indent = true;
using (var stream = new System.IO.StreamWriter(args[1], true))
{
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
stream.Write(Environment.NewLine);
stream.Flush();
//Line below throws the exception
serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
stream.Write(Environment.NewLine);
stream.Flush();
}
}
最佳答案
您正在尝试使用单个 XmlWriter
创建包含多个 root elements 的 XML 文件。 。然而,XML 标准要求 exactly one root element每个 XML 文档。您的 XmlWriter
引发异常,表明正在创建的 XML 无效。 (MCVE here 。)
如果您确实需要将两个 XML 文档连接到一个文件中,则可以使用使用 XmlWriterSettings.CloseOutput
创建的单独的 XmlWriters
设置为false
:
using (var stream = new System.IO.StreamWriter(args[1], true))
{
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
//settings.Indent = true;
settings.CloseOutput = false;
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
}
stream.Write(Environment.NewLine);
stream.Flush();
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, validator.MatchPossiblyValid("STRING FOR PARSING"), emptyNS);
}
//Line below throws the exception
stream.Write(Environment.NewLine);
stream.Flush();
}
样本fiddle .
或者,更好的是,根本不要这样做,因为如上所述,具有多个根的“XML 文档”是无效的。相反,在某个容器元素内序列化这两个对象。
关于c# - 连续的 XML 序列化原因 - EndRootElement 状态下的 token StartElement 将导致无效的 XML 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008900/