1
3
不幸的是,生成XML的库使用了DTD的相对URL,而不是完全限定的URL。因此,xmlcontrol的xmldocument使用 XmlResolver 类将相对路径转换为完全限定路径。默认情况下,它使用 XmlUrlResolver (这是一个具体的XML解析器)。这将尝试将DTD的位置映射到它认为与XML文档相关的位置。问题是,XML文档在哪里?可能是在内存中,它不是与任何内容相关的,而xmlurlresolver使用的是进程位置,在您的情况下是位于“c:\program files\microsoft Visual Studio 9.0\common7\ide\devenv.exe”的Visual Studio。 你能做什么?好吧,我想您必须使用自己的xmlresolver,它继承自xmlurlresolver,并重写resolveuri方法,并做一些适当的事情。完成后,您必须:
坦率地说,这一切都有点麻烦,所以如果我在这里使用string.replace,在将文档处理为XML之前,从文档中删除DTD声明。 如果你真的感到勇敢,你可以创建一个直接从xmlsolver继承的解析器。完成后,可以覆盖 GetEntity 方法,然后您可以从任意位置获取DTD文档。我曾经写过一篇文章,从嵌入的文件中获取DTD作为资源文件,但不幸的是,我已经没有代码了:-( |
2
0
如果您实际上不关心根据其DTD验证每个文档,那么可以在xmlTextReader(或xmlDocument)上将xmlResolver属性设置为空,以完全忽略DTD。 |
Haim Ohayon · 这些链接之间有什么区别? 2 年前 |