解决dom4j加载xml文件性能慢的问题

在代码中使用:

1:  DocumentHelper.parseText

2:

SAXReader reader = new SAXReader();

Document extdocument = reader.read(new File(extMapperPackagePath));

经过检测每次加载3KB文件的xml耗时1秒钟。性能极慢。经过很久终于找到原因,原来是验证xmlDTD文件导致的。

解决办法:跳过DTD验证。

步骤1:创建类

package com.my.common.generator.myplugins;

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()));
    }

}

步骤2:忽略验证

SAXReader reader = new SAXReader(false);
// 忽略DTD,降低延迟
reader.setEntityResolver(new IgnoreDTDEntityResolver());

Document extdocument = reader.read(new File(extMapperPackagePath));

另外注意:

DocumentHelper.parseText用以下代码代替

SAXReader reader = new SAXReader(false);
// 忽略DTD,降低延迟
reader.setEntityResolver(new IgnoreDTDEntityResolver());

Element baseMapperRootElement = reader.read(new InputSource(new StringReader(sqlMap.toString())))

说明:多次读取xml时可以复用SAXReader。

原文地址:https://www.cnblogs.com/wulm/p/9863104.html

时间: 2024-10-16 17:46:25

解决dom4j加载xml文件性能慢的问题的相关文章

dom4j加载xml文件

## dom4j加载xml文件 ``` // 1. 加载xml文件 InputStream is = MyTest.class.getResourceAsStream("user.xml"); // 2. 载入到dom4j中 SAXReader reader = new SAXReader(); Document doc = reader.read(is); // 3. 获取根节点 Element root = doc.getRootElement(); // 4. 获取子节点列表 L

Android动态加载XML文件及控件来简单实现QQ好友印象的功能

在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态加载控件来简单实现QQ中好友印象的功能,其中也会提到如何来动态加载一个XML的配置文件. 那么要实现好友印象的功能,我们需要通过以下这几个步骤: 1.界面一开始需要加载一个EditText和Button控件,用于填写好友印象和添加好友印象: 2.需要新建一个arrays.xml,在xml文件中添加上

js加载xml文件xin

js加载xml文件 作为刚进入软件开发大军的我,以一个水军的资格开始做梦,以一个画者的资格在'一张白纸'上开始涂抹.工作在哪里??工作在哪里呢??? 今天发现一道面试题: 附件中有一个城市列表的city.xml文件,现在需要您通过Javascript脚本对该文件进行解析,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息(界面布局请参考test1.html文件,也可以自行定义). 上网查了一天的资料,绞尽脑汁的试着网上前辈的各种方法,为什么一个个别人成功的案例,

J2EE加载资源文件以及Spring加载XML文件

J2EE加载XML文件 Resource接口,是用来加载文件的接口. FileSystemResource和ClassPathResource都是实现了Resource接口,他们都可以用来加载XML文件. 具体代码如下: 1 Resource resource1 = new ClassPathResource("文件.xml"); 2 3 Resource resource2 = new FileSystemResource("盘符:/项目路径/src/文件.xml"

跨浏览器加载xml文件

var parseXml = { createXmlParser: function () { //IE创建此解析对象 var versions = [ 'MSXML2.DOMDocument.6.0', 'MSXML2.DOMDocument.3.0', 'MSXML2.DOMDocument' ]; var xmlParse = null; for (var i = 0, length = versions.length; i < length; i++) { try { xmlParse

java中使用Properties加载XML文件设置java窗体应用程序的窗体属性

一.描述 开发一个MyFrame窗体应用程序,该窗体继承JFrame类,窗体中的标题.按钮上的文字等信息都可以写在一个xml配置文件中,即使以后想更改所有的属性,只需要更改xml配置文件中的相应属性即可. 本案例使用java中的Properties类来加载一个xml配置文件,并读取文件中的所有属性(key-value),并将取得的所有键值对应用于JFrame窗体属性中. 二.源代码 package tong.day4_27.systemUse; import java.awt.FlowLayou

使用TreeView加载XML文件

PS: 由于小弟初学编程,本文只写实现方式,代码写的不是很好请见谅! 1.需要读取的xml文档内容 2. 最终实现效果 3  貌似看起实现起来很复杂 但是想想还是挺简单 思路:  读取XML文档 →获取XML根元素→ 递归添加根元素(因为树形的结构和XML很像) 具体看代码 首先给加载button注册方法 1 private void btn_LoadXml_Click(object sender, EventArgs e) 2 { 3 //读取Xml文件 this.txt_XmlPath.Te

02操作XML—Unity加载Xml文件方式

学习笔记,如有错误请指正.?号处也请各位指点下,谢谢. 1Unity加载本地Xml文件 xmlDocument.Load("文件绝对路径"); 2Unity加载异地Xml文件 在本地计算机上安装一个Xampp,该软件集成了Apache服务器,将一个Xml文件放到服务器下(Apache的文件放在Htdocs文件夹下) Xml内容如下: void isUserExist(string name, string pwd) { XmlElement root = readXmlFile.Get

sedna加载xml文件

假设有一个xml文件a.xml,需要把它加载到sedna数据库xml_db里. sedna是通过se_term把xml加载到数据库的.有两种方法: 1.通过se_term的-query参数. se_term -query "LOAD 'a.xml' 'a'" xml_db 如果a.xml只是一批xml中的一个,而这一批xml文件,标签都是一样的.可以考虑用集合来存. 创建集合: se_term -query "CREATE COLLECTION 'mycol'" x