//准备解析那些标签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=====");
}
}