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

如何使用.NET控制DTD读取?,.net,xml,dtd,.net,Xml,Dtd,我们的一个C#程序读取XML文件。XML文件具有独立的='no'头 DOCTYPE过去看起来像: <!DOCTYPE foo SYSTEM "silly.dtd"> 其中,silly.dtd不在文件旁边 出于各种原因,我将此更改为 <!DOCTYPE foo PUBLIC "-//Some Public Id" "urn:outerspace:silly.dtd"> 我希望不会有任何更改,因为DTD以前无法以“./silly.DTD”的形式打开,现在也无法在“

我们的一个C#程序读取XML文件。XML文件具有独立的='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中我有点不知所措。

实现您自己的来处理这个问题(您可以只从XMLURLSolver继承),然后将它插入和。

实现您自己的来处理这个问题(您可以只从XMLURLSolver继承),然后将其插入和。

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

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

我不是这样的。当我在读卡器选项中将解析器设置为null时,它创建了一个默认的解析器。我不是这样做的。当我在读卡器选项中将解析器设置为null时,它就开始创建一个默认解析器。