c# - 有没有办法禁用或修改 .NET XML 解析器的严格性?

标签 c# .net xml

我尝试在 .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/

相关文章:

python - 在 python 中解析和转换嵌套 xml

android - android:animateLayoutChanges =“true”with setVisibility(View.GONE)

php - 存储和遍历这些数据的最有效方法是什么?

c# - 添加元素时 xmlns 属性创建为空

c# - 如何在asp.net web api中检测操作系统、浏览器、设备名称等设备信息?

c# - 生成所有可能的组合

c# - 如何禁用 Datagrid 中的特定列排序?

c# - .NET 局部变量优化

c# - 无法正确实现WPF MVVM

c# - 使用单声道构建 C#,找不到 'Regex.IsMatch' 字段