我的XML引用了这样的DTD:
< !DOCTYPE文章PUBLIC“ - //所有者//姓名// EN”“http://invalid/path/to.dtd”>
DTD不能通过给定的URL获得,但我可以将其下载到我的光盘。我试图实现自定义XmlResolver来加载DTD,但它不起作用。我的自定义XmlResolver实现了GetEntity,通过调试器我可以看到以下调用:
任何提示如何以正确的方式实现它?我认为公共外部DTD在出版业很常见,所以必须有一个干净的解决方案!?
欢呼声, Achim的
答案 0 :(得分:1)
"file:///absolut/path/to.xml/-//OWNER//NAME//EN"
是SYSTEM和PUBLIC标识符的串联。通常,您希望查看其中一个,而不是两个,当然不是单个字符串。当您说“请求DTD作为格式的URI”时,不清楚谁在进行请求。似乎调用代码连接SYSTEM和PUBLIC。
如果您将DTD作为磁盘文件,并且您需要做的就是将一个URI映射到另一个URI,则可以覆盖ResolveUri()
而不是完整的GetEntity()
。如果您的资源无法作为简单的URI访问,则GetEntity()
会更有用,例如你在运行时计算资源的内容,你从数据库中获取它,你使用非标准的URL方案和协议,如svn:等。