首先导入jar包dom4j;
需要解析的xml文件:
如下:
<?xml version="1.0" encoding="UTF-8"?> <config> <item KEY="CUST_ID" TAG="客户ID"/> <item KEY="CUST_NAM" TAG="客户名称"/> <item KEY="AGENTID" TAG="代理商ID"/> <item KEY="IDCARD" TAG="身份证号码"/> <item KEY="AGTNAM" TAG="代理商名称"/> <item KEY="CTY_NAME" TAG="所属省份"/> <item KEY="APPLRDAT" TAG="申请日期"/> <item KEY="MYSTS" TAG="客户状态"/> <item KEY="TXN_CON_NUM" TAG="累计刷卡次数"/> <item KEY="TXN_CON_AMT" TAG="累计刷卡金额"/> </config>
然后封装解析类:
/** * */ import java.io.File; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * @author Administrator * */ public class DomXml { public static LinkedHashMap<String, String> xml(String path) throws DocumentException { String p = "src/main/resources/titlexml/";//设置需要解析文件的路径, String path1 = p+path;//将路径与文件拼接成完整路径 SAXReader reader = new SAXReader(); Document doc = reader.read(new File(path1));//"src/main/resources/titlexml/customerInfo.xml" Element root = doc.getRootElement();//获取根节点 List childList = root.elements();//获取根节点下节点数目 LinkedHashMap<String, String> map = new LinkedHashMap<String,String>(); for (int i = 1; i <= childList.size(); i++) { //子节点的操作 Element it = (Element) childList.get(i-1); map.put(i+"", it.attribute("TAG").getValue()); } return map; } /** * * @param path * @return * @throws DocumentException */ public static List<String> xmlExcel(String path) throws DocumentException { String p = "src/main/resources/titlexml/";//设置需要解析文件的路径 String path1 = p+path; SAXReader reader = new SAXReader(); Document doc = reader.read(new File(path1)); Element root = doc.getRootElement();//获取根节点 List childList = root.elements();//获取根节点下节点数目 List<String> list = new ArrayList<String>(); for (int i = 0; i < childList.size(); i++) { //子节点的操作 Element it = (Element) childList.get(i); list.add(it.attribute("TAG").getValue()); } return list; } }
如果子节点还有子节点
那么取值的方法是:
List childList1 = it.elements();
总结一下,就是先拿到跟节点
Document doc = reader.read(new File(path1));
Element root = doc.getRootElement();//获取根节点
然后取子节点
List childList = root.elements();//获取根节点下节点数目
子节点的子节点取法
Element it1 = (Element) childList.get(1); //取根节点的第二个子节点
List childList1 = it1.elements();//取根节点的第二个子节点的所有子节点
Element it = (Element) childList1.get(0);//取根节点的第二个子节点的第一个子节点
it.attribute("ref").getValue();//取根节点的第二个子节点的第一个子节点的值