`

SAXReader不校验dtd文件

    博客分类:
  • Java
阅读更多

今天弄SAXReader读取XML文件时老是报错,说某某路径下的200602.dtd文件找不到。我就觉得奇怪:指定目录的确没这个文件,我的整个电脑上都没有这个文件,必然报错很正常,问题是我没让它读取什么dtd文件啊。后来查来查去,返现我要读写的那个xml文件里面有这个一句:!DOCTYPE dmh SYSTEM "200602.dtd"。原来是xml文件的dtd文件校验。

于是网上搜刮了一下别人的东西,整合成了自己的,在此做个记录。

 

1、设置SAXReader的feature属性,禁止校验dtd文件:

import com.sun.org.apache.xerces.internal.impl.Constants;
......
public static SAXReader getSAXReader(){
	SAXReader saxReader = new SAXReader();
	//在读取文件时,去掉dtd的验证,可以缩短运行时间
	try {
		//saxReader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
		//看着上面的目录,感觉是要去Apache网站上找东西啊,万一我没网咋办呢,所以还是不用的好
		saxReader.setFeature(Constants.XERCES_FEATURE_PREFIX + Constants.LOAD_EXTERNAL_DTD_FEATURE, false);  //设置不需要校验头文件
	} catch (Exception e) {
		e.printStackTrace();
	}
	return saxReader;
}
 2、设置EntityResolver属性,忽略dtd校验:
public static SAXReader getSAXReader(){
	SAXReader saxReader = new SAXReader();
	//在读取文件时,去掉dtd的验证,可以缩短运行时间
	try {
		saxReader.setEntityResolver(new IgnoreDTDEntityResolver());
	} catch (Exception e) {
		e.printStackTrace();
	}
	return saxReader;
}

class IgnoreDTDEntityResolver implements EntityResolver {  
    @Override  
    public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {  
         return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));   
} 
}
 参考链接:
2、禁止校验dtd文件:http://zhoupuyue.iteye.com/blog/812551
这里还有个总的,虽说没参考,但是从这里找到上面两篇的:http://shansun123.iteye.com/blog/1020425
分享到:
评论

相关推荐

    DOM4J解析XML时DTD路径问题

    如果网络不可用或该URL无法访问,则DOM4J将无法获取DTD文件,从而导致解析失败,并抛出异常:“无法找到DTD文件”。 #### 解决方案 为了解决这个问题,可以通过自定义`EntityResolver`来提供一种机制,使得DOM4J...

    SAXReader所需jar包.zip

    SAXReader允许开发者以流式处理方式读取XML文档,这种方式对内存使用非常友好,特别适合处理大型XML文件,因为它不需要一次性加载整个文档到内存中。 描述中提到的两个jar包——"dom4j-1.6.1.jar"和"jaxen-1.1-beta...

    使用SAXReader需要两个jar包

    在Java编程中,解析XML文档是一项常见的任务,而SAXReader是dom4j库中的一个类,用于以SAX(Simple API for XML)方式读取XML文档。SAX是一种事件驱动的XML解析器,它以流式处理XML数据,节省内存资源,特别适合处理...

    用SAXReader解析xml文档

    不过,SAXReader不直接支持Java-XML绑定,但可以配合其他库(如Castor、XStream)实现此功能。例如,通过Castor库,你可以定义一个Java类来匹配XML结构,然后将解析后的Document对象转换为这些Java对象。 **...

    SAXreader需要的jar包.zip

    在这个“SAXreader需要的jar包.zip”压缩文件中,包含了两个重要的第三方库:dom4j-2.1.3.jar和jaxen-1.1.6.jar,它们是用来增强和补充XML解析功能的。 dom4j是一个非常灵活的Java XML API,它提供了包括读取、写入...

    使用DOM4J验证DTD最简单的方法

    如果XML文档不符合DTD,`SAXReader`会抛出`DocumentException`。 ```java SAXReader reader = new SAXReader(); reader.setValidation(true); // 启用DTD验证 reader.setDTDHandler(new DTDHandler() { // 可以...

    Dom4j(SaxReader )开发详解

    2. 创建SaxReader实例:使用`org.dom4j.SaxReader`类的构造函数创建实例,通常不需要进行额外的配置。 ```java SaxReader reader = new SaxReader(); ``` 3. 加载XML文件:调用`read`方法读取XML文件,返回一个`...

    saxreader 解析 XML

    SAX(Simple API for XML)是一种事件驱动的解析器,它不将整个XML文档加载到内存中,而是逐行读取,这使得SAX在处理大型XML文件时比DOM(Document Object Model)更加高效。 SAXReader是Java中一个常用的XML解析库...

    Java通过XML Schema校验XML

    4. **执行校验**:通过调用`SAXReader.read()`方法读取XML文件,同时进行校验。如果XML文件不符合XSD定义的模式,则会抛出异常。 #### 总结 本文介绍了如何使用DOM4j结合SAXParser来实现XML与XSD之间的校验。虽然...

    SAXReader.zip

    4. 解析XML文件:调用SAXReader的read方法,传入XML文件路径,开始解析过程。在这个过程中,SAXReader会根据XML结构触发对应的事件处理器。 5. 定义事件处理器:创建一个继承自DefaultHandler的类,重写需要处理的...

    解析XML文件(字符串)的两种方法

    在使用`SAXReader`或`DocumentHelper`解析XML时,默认情况下会验证DTD(Document Type Definition),这可能会导致解析速度变慢或者因为DTD文件不存在而抛出异常。为了提高效率和避免异常,可以通过设置解析器的相关...

    SAXReader用法.docx

    它是一种事件驱动的解析器,可以高效地处理大型XML文件,因为它不将整个文件加载到内存中。使用SAXReader,你可以逐事件地处理XML文档,例如开始元素、结束元素、字符数据等。以下是一个简单的SAXReader使用示例: ...

    SAXParser-用SAX读取大于100M的xml文件(java)

    压缩包里面有两个文件:SAX.java和SAXparse.java 用来解析大于100M的xml文件,SAX读取xml不同于DOM方式,DOM方式在解析xml前需要全部加载xml文件,当xml文件很大时,就会出现内存不足的问题,而SAX则是逐行读取xml...

    详细解析SAXReader解析器的作用与用法中的使用的xml文件

    详细解析SAXReader解析器的作用与用法中的使用的xml文件

    SAXReader用法.pdf

    接下来,通过调用`read()`方法,传入XML文件的输入源,SAXReader将开始解析并调用预先定义的事件处理器。这些处理器通常需要实现SAX的ContentHandler接口,包含如`startElement()`、`endElement()`和`characters()`...

    Xml.zip_JAVA读取xml_XML读取_java_saxreader

    本教程将重点介绍如何使用SAXReader在Java中读取XML文件。 SAXReader是JDOM库中的一个类,它实现了SAX解析器接口,适用于处理大型XML文档,因为它不会将整个XML文档加载到内存中,而是采用事件驱动的方式,逐个处理...

    looly#hutool-site#流方式读取Excel2003-Excel03SaxReader1

    介绍在标准的ExcelReader中,如果数据量较大,读取Excel会非常缓慢,并有可能造成内存溢出。因此针对大数据量的Excel,Hutool封装了event

    day023-xml解析笔记和代码.rar

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...

    读取XML文件的四种方法

    使用DOM4J方法读取XML文件,需要创建SAXReader对象,读取XML文件得到Document对象,然后使用Element对象的elementIterator方法获取指定标签的迭代器,遍历迭代器进行数据提取。 优点:DOM4J方法提供了高效的XML解析...

Global site tag (gtag.js) - Google Analytics