【问题标题】:How to control DTD reading with .NET?如何使用 .NET 控制 DTD 读取?
【发布时间】:2009-12-09 22:18:35
【问题描述】:

我们的一个 C# 程序读取一个 XML 文件。 XML 文件具有standalone='no' 标头。

DOCTYPE 过去的样子:

<!DOCTYPE foo SYSTEM "silly.dtd">

silly.dtd 不在文件旁边。

由于种种原因,我把这个改成了

<!DOCTYPE foo PUBLIC "-//Some Public Id" "urn:outerspace:silly.dtd">

我预计不会有任何改变,因为 DTD 以前无法以 './silly.dtd' 的形式打开,现在也无法在 'urn:outerspace:silly.dtd' 中打开。唯一的区别是目录解析器不必担心系统 ID 的绝对化。

想象一下,我惊讶地发现 .NET 运行时出现异常,显然是试图在 urn: 地址打开 DTD。

能否有好心人指导我找到一个方法来告诉 .NET 在这种情况下安静地放弃?我知道如何在 Java 中做到这一点,但在 .NET 中我有点迷茫。

【问题讨论】:

    标签: .net xml dtd


    【解决方案1】:

    实现您自己的XmlResolver 来处理这个问题(您可以只从XmlUrlResolver 继承),然后将其插入XmlTextReaderpass the reader to the XmlDocument

    【讨论】:

      【解决方案2】:

      如果您具有以下属性,则阅读器将不会尝试访问 dtd: .ProhibitDtd=假; .XmlResolver=null;

      【讨论】:

      • 这不是发生在我身上的事。当我在阅读器选项中将解析器设置为 null 时,它会创建一个默认解析器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2022-08-02
      • 2023-04-11
      • 2016-08-21
      • 1970-01-01
      相关资源
      最近更新 更多