盡管有一些不足,wutka dtdparser 仍然是使用最廣泛的java dtd dom解析器。
其它可用的java dtd parser有 Ronald Bourret DTD Parser 和 Matra DTD parser
要在DTD中使用中文,必須要在dtd文件的第一行寫上
<?xml version="1.0" encoding="UTF-8"?> |
并且將dtd文件以utf-8格式保存。別的編碼格式也可以試試,但我不想冒險。
dtdparser不使用這個encoding指示來解析DTD,我們只能自己想辦法,修改它的代碼。
dtdparser有這些構造器(省略了帶trace的)
DTDParser(java.io.File in)
DTDParser(java.io.Reader in)
DTDParser(java.net.URL in)
其中以Reader為參數的沒有編碼問題,因為reader本身已經指定了字符集。
以File為參數的構造器內部使用了new FileReader(in),這個方式使用系統默認字符集,不要用它,可以用FileInputStream和InputStreamReader來指定字符集,傳遞給以Reader為參數的構造器。
以URL為參數的構造器內部使用了new InputStreamReader(in.openStream()),沒有指定字符集,我們可以給它增加一個帶有String charsetName參數的構造器,內部調用new InputStreamReader(in.openStream(), charsetName)