XDocument:是否可以强制加载格式错误的XML文件?

我有一个格式错误的XML文件。 根标签未被标签关闭。 最后的标签丢失了。

当我尝试在C#中加载格式错误的XML文件时

StreamReader sr = new StreamReader(path); batchFile = XDocument.Load(sr); // Exception 

我得到一个例外“ 文件已发生意外结束。以下元素未关闭:批处理。第54行,位置1

是否可以忽略关闭标签或强制加载? 我注意到我的所有XML工具((如XML记事本))都会自动修复或忽略该问题。 我无法修复XML文件。 这一个来自第三方软件的copme,有时文件是正确的。

您无法使用XDocument执行此操作,因为此类将所有文档加载到内存中并完全解析它。
但是它可以使用XmlReader处理文档,它可以让你阅读和处理完整的文档,最后你会得到缺少标记的例外。

我建议使用Tidy.NET来清理凌乱的输入

Tidy.NET有一个很好的API来获取“XML”中的问题列表( MessageCollection ),您可以使用它来修复内存中的文本流。 最简单的方法是一次修复一个错误,认为对于许多错误不能很好地执行。 否则,您可能会按反向文档顺序修复错误,以便在执行修复时消息的偏移保持有效

以下是将HTML输入转换为XHTML的示例:

Tidy tidy = new Tidy();

 /* Set the options you want */ tidy.Options.DocType = DocType.Strict; tidy.Options.DropFontTags = true; tidy.Options.LogicalEmphasis = true; tidy.Options.Xhtml = true; tidy.Options.XmlOut = true; tidy.Options.MakeClean = true; tidy.Options.TidyMark = false; /* Declare the parameters that is needed */ TidyMessageCollection tmc = new TidyMessageCollection(); MemoryStream input = new MemoryStream(); MemoryStream output = new MemoryStream(); byte[] byteArray = Encoding.UTF8.GetBytes("Put your HTML here..."); input.Write(byteArray, 0 , byteArray.Length); input.Position = 0; tidy.Parse(input, output, tmc); string result = Encoding.UTF8.GetString(output.ToArray()); 

你可以做的是将结束标记添加到内存中的xml然后加载它。

因此,在将xml加载到流读取器之后,在执行xml加载之前操作数据