我尝试在 .NET 中解析一个稍微糟糕的 XML。同样的 XML 文件可供其他解析器使用 - 也就是说,它们更能容忍用户错误。
XML 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<kml>
<Document id="12345">
<name>My name</name>
<description>My Description</description>
<myns:author>
<myns:name>My Name</myns:name>
</myns:author>
</Document>
</kml>
我是这样加载的:
XmlDocument doc = new XmlDocument();
doc.Load(myFilePath);
第二行正确地抛出一个异常:
'myns' 是一个未声明的前缀。第 6 行,位置 4。
从应用程序的角度来看,我们主要充当另一个能够处理这个稍微错误的 XML 文件的应用程序的管道。我们不想拒绝此第 3 方应用程序能够处理的 XML。
有没有办法禁用或修改 .NET XML 解析器的严格性?
最佳答案
Is there a way to disable or modify the strictness of the .NET XML Parser?
模式验证和类似的东西在某种程度上是可选的,但这只是无效的 XML。 XML 解析器通常如此严格,而且应该如此。下游应用程序能够处理这一事实本身就是一个令人担忧的迹象,IMO。
选项:
- (最佳)修复生成源“XML”的任何内容 - 如果您负责代码,则只需使用 XML API。通常,如果您使用 XML API 编写,它会做正确的事情
- (还不错)在错误的 XML 通过您的主要代码之前编写一个中间步骤来修复它。例如,如果 只是
myns
命名空间前缀未声明的问题,您可以通过在根元素中声明它来修复它。您可能希望逐行加载文件,只需更改第二个(根 XML 声明) - (可能是最糟糕的)甚至不要尝试将其解析为 XML 文件。将其视为原始文本即可。
关于c# - 有没有办法禁用或修改 .NET XML 解析器的严格性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16365959/