代码之家  ›  专栏  ›  技术社区  ›  bmargulies

如何用.NET控制DTD的读取?

  •  1
  • bmargulies  · 技术社区  · 15 年前

    我们的C程序读取一个XML文件。XML文件的头为standalone='no'。

    用于显示以下内容的doctype:

    <!DOCTYPE foo SYSTEM "silly.dtd">
    

    thill.dtd不在文件旁边。

    出于各种原因,我把这个改成

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

    我不希望有什么变化,因为DTD以前不能以“./thill.dtd”打开,现在不能在“urn:outerspace:thill.dtd”打开。唯一的区别是目录解析器不必担心系统ID的绝对化。

    想象一下,我惊讶地从.NET运行时得到一个异常,显然是试图在urn:address打开DTD。

    有什么好心的人能告诉我一个食谱,告诉.NET在这种情况下就安静地放弃吗?我知道如何在Java中实现这一点,但是在.NET中,我有点迷路了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mauricio Scheffer    15 年前

    实现自己的 XmlResolver 要处理此问题(您可以从xmlurlresolver继承),然后将其插入 XmlTextReader pass the reader to the XmlDocument .

        2
  •  0
  •   bill seacham    15 年前

    如果您具有以下属性,则读卡器将不会尝试访问DTD: .prohibiddedtd=错误; .xmlresolver=空;