java解析xml檔案讀取本地dtd或者忽略dtd

2021-06-07 13:44:39 字數 1790 閱讀 2605

1.指定從本地讀取dtd檔案

若要解析的xml檔案中有如下的dtd宣告:。

publicid:被引用的外部實體的公共識別符號,如果未提供,則為 null。

上述的dtd宣告中publicid為-//oasis//dtd dita concept//en

systemid:被引用的外部實體的系統識別符號。

上述的dtd宣告中systemid為

可以通過重新sax的entityresolver類的resolveentity

(string

publicid, 

string

systemid) throws 

saxexception

, ioexception方法指定讀取本地的dtd檔案,該放在在xml解析器解析xml之前呼叫,用於載入指定的dtd檔案:

/**

* implementation oforg.xml.sax.entityresolverthat loads

* entitities (for example dtd files) from the classpath.

*/public class classpathentityresolver

implements entityresolver

systemid = "/" + systemid;

inputstream istr = thread.currentthread().getcontextclassloader().getresourceasstream(systemid);

if (istr != null)

}return null;

}}

在sax解析xml檔案之前,指定使用自定義的classpathentityresolver:

saxparse***ctory spf = saxparse***ctory.newinstance();

saxparser saxparser = spf.newsaxparser();

xmlreader = saxparser.getxmlreader();

xmlreader.setentityresolver(new classpathentityresolver());

xmlreader.setcontenthandler(handler);

try catch (exception e)

注意:

經常測試發現,這種方法只對system(本地dtd)有效,如:

但是對於public(外部dtd)不起作用,如:

2.解析xml檔案時徹底忽略dtd:

sax解析器可以通過指定屬性來確定是否忽略dtd,例子如下:

saxparse***ctory spf = saxparse***ctory.newinstance();

saxparser saxparser = spf.newsaxparser();

xmlreader = saxparser.getxmlreader();

xmlreader.setfeature("", false);

xmlreader.setcontenthandler(handler);

try catch (exception e)

這樣指定之後,解析xml檔案時,不再進行dtd校驗。

JAVA 讀取XML檔案

file sourcefile new file path documentbuilde ctory factory documentbuilde ctory.newinstance documentbuilder builder factory.newdocumentbuilder documen...

Java 解析xml檔案

funtion.xml a儀器裝置管理 device 技術設施維護管理 b裝置校準檢修 device 技術設施維護管理 c裝置購置計畫 device 技術設施維護管理 d資料圖紙管理 informationand 技術資料圖紙管理 e站點基本資訊 station 站點裝置執行管理 f運 況 stat...

python解析xml C 讀取XML檔案

hzjman kiki female encoding utf 8 from xml.etree import elementtree as et 要找出所有人的年齡 per et.parse test.xml p per.findall person for x in p print x.attr...