`
pengfeng
  • 浏览: 229136 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

dom4j解析xml-取消doctype中DTD验证设置

阅读更多

在编写用dom4j解析iBatis的sqlmap文件时,抛出以下异常信息:

 

org.dom4j.DocumentException: ibatis.apache.org Nested exception: ibatis.apache.org
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)

...

Nested exception:
java.net.UnknownHostException: ibatis.apache.org
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)

...

Nested exception: java.net.UnknownHostException: ibatis.apache.org
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)
 

粗体标注的是异常的关键信息,看到此问题相信很多朋友都知道是因为下载doctype中的dtd对xml进行验证时,网络不通所致,sqlmap中doctype定义如下:

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">

 

但实际情况是很多时候程序运行的环境网络不一定和互联网是通的,而且像这样每次联网去下载dtd也会对程序的效率产生影响.于是,出现两种解决办法:

1、去掉xml文件中的doctype或者将doctype中指定的互联网dtd文件改为引用本地dtd文件

2、对dom4j的SAXReader进行设置,不去下载外部dtd文件来对xml进行验证

相信大部分同仁都不大会同意第一种办法,呵呵,我也不太赞同。于是开始寻找第二种方案的解决办法:

reader.setValidation(false);
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

 

两行代码解决问题,关键是第二行

 

参考文章:http://blog.csdn.net/youlianying/archive/2010/09/26/5908335.aspx

分享到:
评论
3 楼 liujunhao225 2012-10-30  
感谢楼主,我遇到了同样的问题。相信看了你的文章一定可以解决。
2 楼 halatate 2011-11-07  
今天上午在处理这个问题,感谢楼主的无私奉献!
1 楼 jkbluesky 2011-02-16  
顶  用的第二种方法  已经解决!!

相关推荐

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    (XML取消了所有标识,包括font,color,p等风格样式定义标识,因此XML全部是采用类似DHTML中CSS的方法来定义文档风格样式。),XML中用来设定显示风格样式的文件类型有: 1.XSL XSL全称是Extensible Stylesheet ...

    xml入门教程/xml入门教程

    3)DTD的缺陷,DTD中的类型比较少,有一些约束在DTD中是表达不了的,DTD不支持XML语法. &3.NameSpace(命名空间) namespace是为了解决XML文档中的命名冲突问题的。 DTD不支持命名空间,解析器无法测试命名空间...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么 简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言...

    解析php DOMElement 操作xml 文档的实现代码

    复制代码 代码如下:/*&lt;...DOCTYPE 班级 SYSTEM “class.dtd” /&gt; –&gt;&lt;!– &lt;!DOCTYPE 班级[&lt;!ELEMENT 班级 (学生+)&gt;&lt;!ELEMENT 学生 (名字,年龄,介绍)&gt;&lt;!ELEMENT 名字 (#PCDATA)&gt;&lt;!

    zyXML解析类模块源码

    zyXML 是一个轻便、小巧的,纯易语言代码来解析XML的模块。优点:。1、不依赖任何DLL、支持库、系统组件(Microsoft.XMLDOM等对象)。2、支持UTF-8 、UTF-16 等编码。3、支持 XPath 语法来查询节点。4、支持 CDATA ...

    Ajax如何传输Json和xml数据

    ajax传输xml数据:只要把数据封装成xml格式就可以实现传输,前台js用responseXML接收xml参数,后台读取用流和dom4j来解析 前台页面 &lt;&#37;@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; ...

    DWR.xml配置文件说明书(含源码)

    DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回Document,Element,Node.DWR会自动将这些转换成浏览器DOM对象.通常在启动JDOM Converter时会有一个提示信息,除非你想采用JDOMconverter否则可以...

    PHP XML操作类DOMDocument

    属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definition 以DTD或XML模式给出的节点的定义(只读) Doctype 指定文档类型节点(只读) ...

    客户端 使用XML DOM加载json数据的方法

    @ Page Language=”C#” AutoEventWireup=”true” CodeBehind=”Default.aspx.cs” Inherits=”XmlDom._Default” %&gt; &lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” ...

    VereWebMVC案例(从数据到前端页面)

    dom4j-1.6.1.jar jaxen-1.1-beta-6.jar VereMVC.jar 将解压后 VereMVC 目录下面的 资源配置 xml 文件 拷贝到 test/src 里面 VereMVC.xml 在 test/WebContent/WEB-INF/web.xml 里面添加支持 VereMVC 配置 ...

    VereMVC至简mvc微架构

    dom4j-1.6.1.jar jaxen-1.1-beta-6.jar VereMVC.jar 4.将解压后 VereMVC 目录下面的 资源配置 xml 文件 拷贝到 test/src 里面 VereMVC.xml 5.在 test/WebContent/WEB-INF/web.xml 里面添加支持 VereMVC...

    比较详细的javascript DOM 学习笔记第1/2页

    一、DOM基础1.节点(node)层次Document--最顶层的节点,所有的其他节点都是附属于它的。DocumentType--DTD引用...Text--代表XML文档中的在起始标签和结束标签之间,或者CDataSection内包含的普通文本。这个节点类

    JavaScript中对DOM节点的访问、创建、修改、删除

    DOM DOM就是Document object Model的缩写。文档对象模型是把XML或HTML以树节点为表现形式的文档。用DOM方法和属性,你可以访问,修改,删除页面上任意一个元素,也是可以添加一个元素。DOM是独立于语言的API,可以被...

    用XMLDOM和ADODB.Stream实现base64编码解码实现代码

    用 XMLDOM 和 ADODB.Stream 实现base64编码解码 &lt;/title&gt; &lt;meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″&gt; &lt;style type=”text/css” title=””&gt; #textarea1,#...

    易语言-zyXML解析类模块

    优点:1、不依赖任何DLL、支持库、系统组件(Microsoft.XMLDOM等对象)2、支持UTF-8 、UTF-16 等编码3、支持 XPath 语法来查询节点4、支持 CDATA5、开源(如果有任何问题可以自己修改)缺点:1、加载速度稍微逊色于...

    javascript读取Xml文件做一个二级联动菜单示例

    代码如下: &lt;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”&gt; &lt;... &lt;head&gt; &lt;title&gt;.../title&gt;... [removed] function ... try{ //IE xmlDoc=new ActiveXObject(“Microsoft.XMLDOM”

    JS实现文字掉落效果的方法

    DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&gt; &lt;html xmlns=http://www.w3.org/1999/xhtml xml:lang=ru&gt; &lt;head&gt; &lt;title&gt;&lt;/title...

    JavaScript 节点操作 以及DOMDocument属性和方法

    属性: 1Attributes 存储节点的属性列表(只读) 2childNodes 存储节点的子节点列表(只读) 3dataType 返回此节点的数据类型 4Definition 以DTD或XML模式给出的节点的定义(只读) 5Doctype 指定文档类型节点(只读) 6...

Global site tag (gtag.js) - Google Analytics