最近做一個小項目,要用到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);//這一行是必須要有的
至此,問題解決~~~希望能夠幫到一些需要的朋友。。。