1

我正在制作一个将其数据存储在 XML 文件中的程序。当人们编写 XML 时,他们可能会犯一些细微的错误,例如以“-看起来像”来结束注释或在属性中<!-- comment --->添加一个。</>当然,XML 仍然可以正常读取,但是尝试将此文本输入到 XmlDocument 中会出现语法错误(并且不会被解析)。

有没有办法让 XmlDocument 不那么严格,并使其忽略不使文档无法解析的标准违规行为?例如,很明显它<!-- comment --->仍然是一个注释,即使它-在末尾包含违反标准规范)。

4

2 回答 2

6

不,这是一件好事。

XML 是一种严格的格式,这里的解决方案是正确(更正)输入。

所有 XML 工具在设计上都非常挑剔。使用 XMLReeader 并修复或拒绝错误元素可能会有一些运气。

但是使用合适的工具创建 XML 要好得多。其中不少被命名为XmlPad

于 2012-04-16T11:26:06.173 回答
1

不,XML 解析器应该拒绝不是有效 XML 的输入。

您可以尝试通过Tidy预处理无效文件,但最好确保输入有效。

这是一个示例用法。Tidy 会修复您的评论并进行一些转义,但额外的开头 < 往往会破坏事情 - 在这种情况下猜测实在是太难了。

Tidy tidy = new Tidy();
tidy.Options.FixComments = true;
tidy.Options.XmlTags = true;
tidy.Options.XmlOut = true;

string invalid = "<root>< <!--comment--->></root>";
MemoryStream input = new MemoryStream(Encoding.UTF8.GetBytes(invalid));
MemoryStream output = new MemoryStream();
tidy.Parse(input, output, new TidyMessageCollection());
// TODO check the messages

string repaired = Encoding.UTF8.GetString(output.ToArray());
于 2012-04-16T11:32:46.377 回答