dom4j基于事件流解析大XML的文件
来源:互联网 发布:ukec中介怎么样 知乎 编辑:程序博客网 时间:2024/06/05 23:54
//准备解析那些标签bean
package test.dom4j;
public class XmlConfig {
private String dataType;
private String fieldName;
private int readType;
private String nodeName;
private String nodeDesc;
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public int getReadType() {
return readType;
}
public void setReadType(int readType) {
this.readType = readType;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public String getNodeDesc() {
return nodeDesc;
}
public void setNodeDesc(String nodeDesc) {
this.nodeDesc = nodeDesc;
}
}
//接口解析器
package test.dom4j;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public interface ElementParser<T> {
T parseElement(Element element,SAXReader reader) throws Exception;
}
//用map封装 xml解析出来的数据
package test.dom4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class MapElementParser implements ElementParser{
@Override
public Map<String, String> parseElement(Element element, SAXReader reader)
throws Exception {
List<XmlConfig> xmlConfigList = new ArrayList<XmlConfig>();
XmlConfig bean = new XmlConfig();//配置要解析的标签
bean.setDataType("01");
bean.setFieldName("aae002");
bean.setNodeDesc("个人编号");
bean.setNodeName("AAE002");
bean.setReadType(02);
XmlConfig bean1 = new XmlConfig();
bean1.setDataType("01");
bean1.setFieldName("aae003");
bean1.setNodeDesc("缴费类型");
bean1.setNodeName("AAE003");
bean1.setReadType(02);
XmlConfig bean2 = new XmlConfig();
bean2.setDataType("01");
bean2.setFieldName("aae076");
bean2.setNodeDesc("个人合计金额");
bean2.setNodeName("AAE076");
bean2.setReadType(02);
xmlConfigList.add(bean);
xmlConfigList.add(bean1);
xmlConfigList.add(bean2);
if(xmlConfigList==null || xmlConfigList.size()==0){
reader.removeHandler("/root/jy");
}
Map<String,String> map = new HashMap<String,String>();
for(XmlConfig config : xmlConfigList){
String val = null;
switch (config.getReadType()){
case 1:
val = element.attributeValue(config.getNodeName().trim());
break;
case 2:
val = element.elementTextTrim(config.getNodeName());
break;
default:
break;
}
if(val != null || "".equals(val)){
map.put(config.getFieldName(), val);
}
}
return map;
}
}
//dom4j解析主要handler
package test.dom4j;
import java.util.HashMap;
import java.util.Map;
import org.dom4j.Element;
import org.dom4j.ElementHandler;
import org.dom4j.ElementPath;
import org.dom4j.io.SAXReader;
public class MyElementHandler implements ElementHandler {
SAXReader reader = new SAXReader();
Element element = null;
DKEmployeeInfoProcessor processor = new DKEmployeeInfoProcessor();
@Override
public void onEnd(ElementPath ep) {
Element row = ep.getCurrent();
Map<String,String> bean = new HashMap<String,String>();
try {
bean = new MapElementParser().parseElement(row, reader);
} catch (Exception e) {
e.printStackTrace();
}
row.detach();
if(bean != null){
processor.process(bean, reader);
}
}
@Override
public void onStart(ElementPath arg0) {
Element row = arg0.getCurrent();
row.detach();
}
}
//处理器
package test.dom4j;
import org.dom4j.io.SAXReader;
public interface ElementProcessor<T> {
void process(T recode,SAXReader reader);
}
//实现后的处理器
package test.dom4j;
import java.util.Iterator;
import java.util.Map;
import org.dom4j.io.SAXReader;
public class DKEmployeeInfoProcessor implements ElementProcessor<Map<String, String>>{
@Override
public void process(Map<String, String> recode, SAXReader reader) {
System.out.println("=====返回的map"+recode);
Iterator<Map.Entry<String,String>> iterator = recode.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> entry = iterator.next();
System.out.println("=======" + entry.getValue());
}
}
}
//测试类
package test.dom4j;
import java.io.File;
import java.util.Map;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class MyTestDom4j {
public static void main(String[] args) throws Exception {
MyElementHandler handler = new MyElementHandler();
SAXReader reader = new SAXReader();
reader.addHandler("/root/jy", handler);
reader.read(new File("E://Workspaces//MyEclipseProfessional//Dom4jTest//src//testDom4j.xml"));
System.out.println("======end=====");
}
}
- dom4j基于事件流解析大XML的文件
- 使用DOM4J解析大容量XML文件
- xml文件的dom4j解析
- 基于Dom4j写的XML解析类
- 基于dom4j的xml创建与解析
- xml文件解析-DOM4J
- dom4j解析Xml文件
- DOM4J 解析XML文件
- dom4j解析xml文件
- dom4j解析XML文件
- dom4j解析xml文件
- dom4j 解析xml文件
- dom4j解析xml文件
- dom4j解析XML文件
- Dom4J解析XML文件
- dom4j解析xml文件
- Dom4j解析xml文件
- Dom4j 解析xml文件
- 图吧“LBS+银行”打造管理和服务模式创新
- Android ViewPager基本使用方法
- 使用IBM Data Movement Tool 具体迁移oracle至db2实验
- android工程下assets与raw文件夹
- MyEclipse下Tomcat启动变慢的解决方法
- dom4j基于事件流解析大XML的文件
- hello world
- 数据结构--线性表
- python dataframe join
- 【腾讯Bugly干货分享】H5 视频直播那些事
- epoll 三个方法 两种工作模式
- javaweb学习总结(三十一)——国际化(i18n)
- 单精度float 和双精度double
- Maven编译打包时如何忽略测试用例