如果用digister處理的xml里包含了外部dtd指定,即在!DOCTYPE中用PUBLIC指定外部dtd,即使使用了
digester.setValidating(false);
底層的sax解析器xerces仍然會去指定的地址去加載DTD,特別地,如果指定的地址無法獲得DTD,就會拋出異常:
SAXException: The markup declarations contained or pointed to by the document type declaration must be well-formed
為了避免這個問題,可以使用這樣的語句:
digester.setValidating(false);
digester.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",false);
當然這個設置只有在底層的sax解析器是xerces才有效。如果你使用的是其它的sax解析器,請參考解析器的文檔。

底層的sax解析器xerces仍然會去指定的地址去加載DTD,特別地,如果指定的地址無法獲得DTD,就會拋出異常:

為了避免這個問題,可以使用這樣的語句:


當然這個設置只有在底層的sax解析器是xerces才有效。如果你使用的是其它的sax解析器,請參考解析器的文檔。