有没有办法使 XmlDocument 解析不那么严格
本文关键字:XmlDocument 有没有 | 更新日期: 2023-09-27 18:31:19
我正在制作一个程序,将其数据存储在XML文件中。当人们编写 XML 时,他们可能会犯一些细微的错误,例如以 -
结尾注释,使其看起来像<!-- comment --->
或在属性中添加</>
。当然,XML 仍然可以正常读取,但尝试将此文本输入到 XmlDocument 中会给出语法错误(并且不会被解析)。
有没有办法使 XmlDocument 不那么严格,并使其忽略不使文档无法解析的标准违规行为?例如,很明显,即使<!-- comment --->
末尾包含违反标准规范的-
,它仍然是一个注释)。
> 不,这是一件好事。
XML是一种严格的格式,这里的解决方案是具有正确(更正)的输入。
根据设计,所有 XML 工具都非常挑剔。您可能对XMLReeader和修复或拒绝错误的元素有一些运气。
但是,使用合适的工具创建XML要好得多。其中相当多的被命名为XmlPad
不,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());