有没有办法使XmlDocument解析不那么严格

时间:2012-04-16 11:21:29

标签: c# xml xmldocument

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

有没有办法让XmlDocument不那么严格,并且忽略了不会使文档无法解析的违反标准的行为?例如,很清楚<!-- comment --->仍然是注释,即使它最后包含-,这与标准规范相反。)

2 个答案:

答案 0 :(得分:7)

不,这是件好事。

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

根据设计,所有XML工具都非常挑剔。您可能对XMLReeader运气不错,并修复或拒绝有缺陷的元素。

但使用合适的工具创建XML要好得多。其中相当一部分被命名为XmlPad

答案 1 :(得分:2)

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

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

这是一个示例用法。 Tidy将修复你的评论并做一些逃避,但额外的开放&lt;会经常打破这种情况 - 在这种情况下猜测是太过分了。

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());