有没有办法禁用或修改.NET XML Parser的严格性?

jgl*_*uie 1 .net c# xml

我有一个稍微不好的XML,我试图在.NET中解析.其他解析器可以使用相同的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>
Run Code Online (Sandbox Code Playgroud)

我像这样加载它:

XmlDocument doc = new XmlDocument();
doc.Load(myFilePath);
Run Code Online (Sandbox Code Playgroud)

第二行正确地抛出异常:

'myns' is an undeclared prefix. Line 6, position 4.

从应用程序的角度来看,我们主要是作为另一个能够处理这个稍微错误的XML文件的应用程序的管道.我们不想拒绝此第三方应用程序能够处理的XML.

有没有办法禁用或修改.NET XML Parser的严格性?

Jon*_*eet 6

有没有办法禁用或修改.NET XML Parser的严格性?

模式验证和类似的东西在某种程度上是可选的,但这只是无效的XML.XML解析器通常严格的,应该是.下游应用程序能够处理这个问题这一事实本身就是IMO的一个令人担忧的迹象.

选项:

  • (最佳)修复产生源"XML"的任何内容 - 如果您负责代码,那么只需使用XML API.通常,如果您使用XML API编写,它将做正确的事情
  • (也不错)编写一个中间步骤来修复错误的XML,然后再通过主代码.举例来说,如果它只是一个对的事情myns命名空间前缀是未申报的,你可以修复,通过在根元素声明它.您可能希望逐行加载文件,只需更改第二个(根XML声明)
  • (可能,最糟糕)甚至不要尝试将其解析为XML文件.只需将其视为原始文本即可.