我正在制作一个程序,将其数据存储在XML文件中。当人们编写XML时,他们可能会犯一些微妙的错误,例如使用-
结束评论,使其看起来像<!-- comment --->
或在属性中添加</>
。当然,XML仍然可以正确读取,但是尝试将此文本输入到XmlDocument中会产生语法错误(并且不会被解析)。
有没有办法让XmlDocument不那么严格,并且忽略了不会使文档无法解析的违反标准的行为?例如,很清楚<!-- comment --->
仍然是注释,即使它最后包含-
,这与标准规范相反。)
答案 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());