参考Java中的本地DTD

时间:2011-06-13 14:32:21

标签: java xml sax dtd

我有一些XML,我正在使用Java中的SAX解析器进行解析。它从这个序言开始:

<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 3.0//EN"
           "http://www.w3.org/Math/DTD/mathml3/mathml3.dtd">

如何更改此设置以使用本地DTD?

我想我可以这样做:

<!DOCTYPE math 
    PUBLIC "-//W3C//DTD MathML 3.0//EN"
           "file:///c:/MathML/mathml3.dtd">

不完全那样,但某事就像那样。但是,我需要路径独立于用户的系统。

如何使用具有相对于类路径的路径的本地DTD?

4 个答案:

答案 0 :(得分:4)

使用XML目录查看this article以在本地解析DTD,而无需修改XML源。基本步骤是:

  1. 创建一个将系统ID映射到本地DTD的XML文件
  2. 修改代码以实例化和配置CatalogResolver
  3. 将CatalogResolver提供给XML Reader(从解析器获取)

答案 1 :(得分:4)

在处理Web Apps时,您可以将dtd放在lib文件夹中,并将其引用为:

<!DOCTYPE name PUBLIC 
    "-//CMP//DTD dtdName 1.0//EN"
        "/WEB-INF/lib/dtdName.dtd">

答案 2 :(得分:3)

解决方案是使用classpath在系统中提供DTD文件位置。因此离线工作的DocType将是:

<!DOCTYPE hibernate-configuration SYSTEM 
    "classpath://org/hibernate/hibernate-configuration-3.0.dtd">

答案 3 :(得分:0)

另一种方法可以是将dtd保留在localhost中,以便最终路径变为:

<!DOCTYPE hibernate-configuration SYSTEM 
          "http://localhost/hibernate-configuration-3.0.dtd">

绝对不是最优雅的解决方案,但确实有效。