官方包下载地址:
http://www.dom4j.org/download.html
转载:
http://www.blogjava.net/rain1102/archive/2009/09/07/290063.html
当你用domj读取一个有dtd验证的xml文件,同时你的网络是不通的情况下。会出现以下错误:
Caused by:
org.dom4j.DocumentException: www.bea.com Nested exception: www....com
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:264)
参照: javaeye上另一文章方法:声明本地的dtd验证
hibernate.sourceforge.net Nested exception: hibern
http://cherryqq.iteye.com/blog/401862
处理方法:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"file:///F:/hibernate-test/classes/hibernate-mapping-2.0.dtd">
就可以了。
但这样很麻烦.
其实我们的XML肯定是合法的,不需要验证。
而设置不需要验证,只需要设置DocumentBuilderFactory.setValidating(false)
就可以达到效果了,但是解析器还是会读取DTD的,解决的方法是实现EntityResolver接口,具体代码如下:
import Java.io.ByteArrayInputStream;
import Java.io.IOException;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class IgnoreDTDEntityResolver implements EntityResolver {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
return new InputSource(
new ByteArrayInputStream(
"<?xml version='1.0' encoding='UTF-8'?>".getBytes()
));
}
}
然后设置SAXReader 对象如下:
SAXReader reader = new SAXReader();
reader.setEntityResolver(new IgnoreDTDEntityResolver());
就行了
另外一种方式为:
SAXReader xppReader = new SAXReader();
xppReader.setValidation(false);// 不验证xml文件内的dtd
xppReader.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId,
String systemId) throws SAXException, IOException {
InputStream stream = XmlUtil.class.getClassLoader().getResourceAsStream("***.dtd");
InputSource is = new InputSource(stream);
is.setPublicId(publicId);
is.setSystemId(systemId);
return is;
}
});
分享到:
相关推荐
#### dom4j解析XML时忽略DTD文件验证 在使用`SAXReader`或`DocumentHelper`解析XML时,默认情况下会验证DTD(Document Type Definition),这可能会导致解析速度变慢或者因为DTD文件不存在而抛出异常。为了提高效率...
Dom4j 是一个易于使用且功能强大的 Java 库,主要用于处理 XML 文件。它不仅支持 XML 的解析,还支持 XPath 和 XSLT,使其成为 Java 开发者在进行 XML 处理时的首选工具之一。Dom4j 的官方网站将其定义为“一个易于...
此外,DOM解析器支持DTD(Document Type Definition)和XML Schema进行验证,可以通过调用`setValidating()`和`setIgnoringElementContentWhitespace()`方法来开启或关闭验证和忽略元素内容中的空白。 2. SAX解析:...
Java提供了多种方式来解析XML文档,包括DOM解析和SAX解析,这两种方式各有优缺点,适用于不同的场景。本章将详细介绍这两种解析方法,并通过实例讲解如何使用Java来获取XML文档中的标签内容和属性。 1. **解析器的...
SAX解析XML文件的核心思想是读取XML文件时,遇到每个元素、属性或其他结构时,都会触发一个相应的事件处理器方法。这些处理器方法由应用程序实现,从而对XML文档进行处理。下面将详细介绍SAX解析XML的基本步骤、主要...
- 解析XML:调用解析器的parse()方法开始解析,对于DOM解析,会返回一个Document对象;对于SAX或StAX,会触发一系列事件回调。 - 处理解析结果:对解析得到的数据进行操作,如查找特定元素、提取属性值、转换为...
SAX,全称为Simple API for XML,是一种基于事件驱动的XML解析器,相较于DOM解析,它具有更快的速度和更低的内存占用。DOM解析会将整个XML文档加载到内存中形成一个节点树,适合处理小规模或内存有限的情况。而SAX则...
另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单的XML文件,比如配置文件时,特别的合适。
1. **DOM解析**:将整个XML文档加载到内存,形成一个树形结构,便于遍历和操作。 2. **SAX解析**:事件驱动,逐行读取XML文档,对每个元素、属性等触发相应事件,节省内存。 3. **StAX解析**(流式API):允许程序按...
4. 解析XML文档:调用XMLReader的parse方法,传入XML文档的输入源。 此外,Xerces-J还提供了其他功能,例如DOM解析器,适用于需要在内存中构建整个XML文档结构的情况;JAXP接口则允许灵活地选择解析器实现,无论是...
### XML基础及DOM 文档对象模式和SAX 基于事件处理模式 学习笔记 #### XML概述 XML(可扩展标记语言)是一种由W3C(万维网联盟)定义的标记语言,用于存储和传输数据。与HTML相比,XML更注重于数据的描述而非展示...
### XML 1.0 标准(第二版...常见的处理器包括DOM解析器和SAX解析器。 #### 6. 记法 XML记法用于定义特定类型的数据,如图像或声音文件的格式。记法声明可以出现在文档类型定义中,用于指定文档中特定元素的数据类型。
例如,它是一个无验证的解析器,忽略与文档相关联的DTD(文档类型定义)。如果XML文档格式不正确,解析过程可能以错误消息终止。此外,Expat解析器只支持US-ASCII、ISO-8859-1和UTF-8编码格式的XML数据。如果XML数据...
需要注意的是,虽然Java标准库提供了这些功能,但在某些情况下,如处理大型XML文件或需要更高级的功能(如XPath查询),可能需要引入如Apache DOM4J或JDOM等第三方库,它们提供了更高效、更易用的API。 在提供的`...
- 缺点:不支持验证,忽略DTD(文档类型定义),仅支持US-ASCII, ISO-8859-1和UTF-8三种编码。另外,对于需要基于XML结构进行复杂操作的情况,使用起来可能较困难。 - 主要函数:`xml_parse_into_struct`用于将XML...
6. CDATA段:在XML中,某些数据可能包含需要被解析器忽略的特殊字符,这时可以使用CDATA段,如`<![CDATA[ 这里是不受解析器解析的文本 ]]>`。 7. 解析和处理XML:XML解析器读取XML文档并将其转换为数据结构,如DOM...
4. 使用XMLReader的`parse`方法开始解析XML输入源(如文件或流)。 SAX2还支持命名空间处理,这是通过`NamespaceSupport`类实现的,它可以帮助跟踪XML文档中的命名空间声明,以便在处理元素时正确地处理命名空间...
`XmlReader`是高效的只进XML解析器,用于顺序读取XML文档而不创建整个文档对象模型(DOM)。它适用于大文件和性能敏感的场景。`XmlWriter`则用于写入XML,提供了一种流式的方法来构建XML文档。 6. **XPath和...
8. SAX (Simple API for XML):SAX是一种事件驱动的API,用于解析XML文档。它逐个读取XML文档中的数据,并在读取过程中触发事件,应用程序可以在事件处理中执行必要的操作。SAX适合处理大型文档,因为它不需要将整个...