Dom4j读取XML文件时遇到的一个问题(关于DTD)

来源:互联网 发布:软件开发方案书 编辑:程序博客网 时间:2024/05/22 00:24

最近做一个小项目,要用到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);//这一行是必须要有的

至此,问题解决~~~希望能够帮到一些需要的朋友。。。

1 0
原创粉丝点击