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

DOCTYPE分辨率和ASP。净

  •  2
  • Josh  · 技术社区  · 17 年前

    在一个 previous question 我提到了一些使用第三方DLL的工作,该DLL的接口使用一系列使用DTD定义的XML输入。到目前为止,一切进展顺利,但在解决生成的输入值中的文档类型声明时,我仍然存在一个恼人的问题。

    <!DOCTYPE ElementName SYSTEM "ElementName.dtd">
    

    我最初的想法是,应用程序的当前执行路径是解析器查找DTD的地方。然而,当我试图使用 XML control

    找不到文件'c:\Program Files\Microsoft Visual 工作室 9.0\Common7\IDE\ElementName.dtd'

    有没有XML专家可以帮我解决这个问题。我真的无法控制从这个DLL返回的XML,所以我该怎么办。有没有一种方法可以向操作系统“注册”DTD?像GAC一样?

    2 回复  |  直到 9 年前
        1
  •  3
  •   Martin Brown    17 年前

    XmlResolver XmlUrlResolver

    那你能做什么?好吧,我想你必须创建自己的XmlResolver,它继承自XmlUrlResolver,并重写ResolveUri方法并执行适当的操作。完成上述操作后,您必须:

    1. 创建一个XmlDocument,并在XmlReader中调用Load传递。
    2. 将XmlControl的XmlDocument属性设置为XmlDocument。

    坦率地说,这有点痛苦,所以如果是这样的话,我会使用string.Replace从文档中删除DTD声明,然后再将其处理为XML。

    如果你真的很勇敢,你可以创建一个直接从XmlResolver继承的解析器。一旦你做到了这一点,你就可以覆盖 GetEntity 方法,然后您可以从任何地方获取dtd文档。我曾经写过一个从作为资源文件嵌入的文件中获取dtd的程序,但不幸的是,我已经没有代码了:-(

        2
  •  0
  •   Martin    17 年前

    推荐文章