簡體   English   中英

引用 Java 中的本地 DTD

[英]Referring to a local DTD in Java

我有一些 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">

不完全是那樣,而是那樣。 但是,我需要獨立於用戶系統的路徑。

如何使用具有相對於 class 路徑的路徑的本地 DTD?

在處理 Web 應用程序時,您可以將 dtd 放在 lib 文件夾中並像這樣引用它:

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

解決方案是使用類路徑提供系統中的 DTD 文件位置。 所以離線工作的 DocType 將是:

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

查看這篇關於使用 XML 目錄在本地解析 DTD 而無需修改 XML 源的文章。 基本步驟是:

  1. 創建將系統 ID 映射到本地 DTD 的 XML 文件
  2. 修改您的代碼以實例化和配置 CatalogResolver
  3. 將 CatalogResolver 提供給 XML 閱讀器(從解析器獲得)

另一種方法是將 dtd 保留在本地主機上,以便最終路徑變為:

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

絕對不是最優雅的解決方案,但確實有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM