Dom4j讀取XML文件時遇到的一個問題(關於DTD)

最近做一個小項目,要用到Dom4j對XML文件進行讀取,獲得數據庫配置信息,XML文件如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">
<DBConfig brief="數據庫連接的相關配置" name="DB-CONFIG">
<DB_CLASS_NAME>com.microsoft.sqlserver.jdbc.SQLServerDriver</DB_CLASS_NAME>
<DB_URL>JDBC:microsoft:sqlserver://localhost:1433;DatabaseName=CityCRM</DB_URL>
<DB_USER>sa</DB_USER>
<DB_PWD>123456</DB_PWD>
</DBConfig>

利用Dom4j讀取XML代碼如下:

Document doc=saxReader.read(new File(path));//path爲XML文件路徑
Element root=doc.getRootElement();
dbUrl=root.element("DB_URL").getText();
dbUser=root.element("DB_USER").getText();
dbPwd=root.element("DB_PWD").getText();

但是讀取時,速度很慢,有時甚至讀取超時,我不明白了,爲什麼這麼幾行XML讀取這麼慢?後來上網找資料,發現這方面資料也很少,不過還是讓我找到了,原來慢的原因是因爲這個

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">

對於DTD,是對XML的格式約束,不明白的大家可以百度一下,這是引用的一個公共的外部文件,非本地文件 ,所以要連接網絡讀取,所以之所以超時,也就明瞭了,那要怎樣解決?最簡單的辦法就是註釋掉這個,但會有惱人的警告,估計很多碼農會受不了吧,於是我繼續百度,發現了一個解決辦法,只要在代碼
SAXReader saxReader=new SAXReader();//這句之後加上下面這麼兩行,就可以了
saxReader.setValidation(false)//經測試,這一行不是必須的

saxReader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);//這一行是必須要有的

至此,問題解決~~~希望能夠幫到一些需要的朋友。。。

發佈了28 篇原創文章 · 獲贊 49 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章