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=====");
}
}


0 0
原创粉丝点击