Java_数据交换_dom4j_01_解析xml
1.说明
详细原理以后再研究,先将例子存着
2.代码
2.1 xml内容
<?xml version="1.0" encoding="UTF-8"?> <weixin:Qi-config xmlns:weixin="aurora.plugin.weixin"> <instnces> <weixin:Qiyeance token="wei胜多负少xin" corpId=防守打法b5a4889c1e12" encodingAESKey="z3s7Tgh3mknc2电饭锅w5MevwYocgmEL1Gtw" appName="规定发给c"/> </instnces> <tokenTasks> <weixin:Qiyask groupname="hec" corpId="wwa4889c1e12" secrect="kOpZjWDSmdhghOB7fydfFW6m0-sSMOQYV_Cko" /> </tokenTasks> </weixin:Qi-config>
2.2java 代码
package com.ray.test; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.junit.Test; public class TestParseXMl { Map<String, Map<String,String>> weiXinConfigMap=new HashMap<String, Map<String,String>>(); /** * 获取文件的document对象,然后获取对应的根节点 * @throws Exception */ @Test public void testGetRoot() throws Exception{ SAXReader sax=new SAXReader();//创建一个SAXReader对象 //File xmlFile=new File("src/main/java/aurora/plugin/weixin/qiyewexin.config");//根据指定的路径创建file对象 File xmlFile=new File("src/com/ray/test/qiyewexin.config");//根据指定的路径创建file对象 Document document=sax.read(xmlFile);//获取document对象,如果文档无节点,则会抛出Exception提前结束 Element root=document.getRootElement();//获取根节点 this.getNodes(root);//从根节点开始遍历所有节点 for(String key:weiXinConfigMap.keySet()){ System.out.println("节点名字:key"+key); Map<String ,String> attMap=weiXinConfigMap.get(key); for(String key2:attMap.keySet()){ System.out.println("属性名:"+key2+ ",属性值:"+attMap.get(key2)); } } } /** * 从指定节点开始,递归遍历所有子节点 * @param node */ public void getNodes(Element node ){ System.out.println("--------------------"); //当前节点的名称、文本内容和属性 System.out.println("当前节点名称:"+node.getName());//当前节点名称 System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称 List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list Map<String,String> attrMap=new HashMap<String,String>(); for(Attribute attr:listAttr){//遍历当前节点的所有属性 String name=attr.getName();//属性名称 String value=attr.getValue();//属性的值 System.out.println("属性名称:"+name+"属性值:"+value); //将微信配置属性存入map if("QiyeWeixin-instance".equals(node.getName())||"QiyeToken-task".equals(node.getName())){ attrMap.put(name, value); } } //递归遍历当前节点所有的子节点 List<Element> listElement=node.elements();//所有一级子节点的list for(Element e:listElement){//遍历所有一级子节点 this.getNodes(e);//递归 } if("QiyeWeixin-instance".equals(node.getName())||"QiyeToken-task".equals(node.getName())){ weiXinConfigMap.put(node.getName(), attrMap); } } /** * 从指定节点开始,递归遍历所有子节点 * @param node */ public void getNodes0(Element node){ System.out.println("--------------------"); //当前节点的名称、文本内容和属性 System.out.println("当前节点名称:"+node.getName());//当前节点名称 System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称 List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list for(Attribute attr:listAttr){//遍历当前节点的所有属性 String name=attr.getName();//属性名称 String value=attr.getValue();//属性的值 System.out.println("属性名称:"+name+"属性值:"+value); } //递归遍历当前节点所有的子节点 List<Element> listElement=node.elements();//所有一级子节点的list for(Element e:listElement){//遍历所有一级子节点 this.getNodes(e);//递归 } } }