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);//递归
}
} }

Java_数据交换_dom4j_01_解析xml的更多相关文章

  1. 常用两种数据交换格式之XML和JSON的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  2. 两种常用的数据交换格式:XML和JSON

    不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated va ...

  3. Java_数据交换_JAXB_用法入门

    一.前言 最近有个需求,需要进行xml 与 bean 的相互转化. 使用 JAXB 可完成这个需求. 二.概述 JAXB(Java Architecture for XML Binding) 是一个业 ...

  4. 数据交换格式之 - XML

    XML简介 XML是一种可扩展的标记语言,被设计用来传输和存储数据.传输数据. 需要自定义标签,自我描述性,XML是W3C的推荐标准: XML的特点与作用 特点: xml与操作系统.编程语言的开发平台 ...

  5. Java_数据交换_Jackson_用法入门

    一.用法 二.参考资料 1.官方 1.Java下利用Jackson进行JSON解析和序列化 2.

  6. Java_数据交换_Gson_00_资源帖

    1.Gson将字符串转换成JsonObject和JsonArray 2.Gson 解析教程 3.Gson全解析(上)-Gson基础

  7. Java_数据交换_fastJSON_01_用法入门

    一.用法 1.序列化—将Object转为Json对象 Object data=JSON.toJSON( MyObject ); 注:本文的Object可以是Map.List.javaBean等 需求: ...

  8. XML和JSON两种数据交换格式的比较

    在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...

  9. Java 常见数据交换格式——xml、json、yaml

    目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...

随机推荐

  1. 为div添加滚动效果:

    为div添加滚动效果: .xxxx{ width: 100%; height: 100%; overflow: hidden; overflow-y: auto;} 代码片段 <div clas ...

  2. 多媒体开发之---h264格式slice_header

    从Slice_Header学习H.264 写在前面: $     H.264我是结合标准和毕厚杰的书一块学的.看句法语义时最是头疼,一大堆的元素,很需要耐心.标准中在介绍某个元素的语义时,经常会突然冒 ...

  3. js自己定义插件-选项卡

    该功能比較简单.巩固一下jquery插件写法,注意引入的jquery.js  . 自己定义插件路径代码例如以下: 页面: <!doctype html> <html> < ...

  4. LNMP环境搭建(一:nginx)

    1.从nginx官网获取源码包 # cd /usr/local/src # wget http://nginx.org/download/nginx-1.10.3.tar.gz 2.解压源码包 # t ...

  5. Springboot整合日志时候出现的问题

    上图是问题,按照路径去找下,发现其实是jar包重复导致的! 在对应的项目上,右键--->属性(Properties)--->JavaBuild Path  然后选择Libraries 页签 ...

  6. js滚动到指定位置显示或隐藏元素

    $(function(){ $(window).scroll(function(){ var scroll_top=$(window).scrollTop(); console.log(scroll_ ...

  7. 我的Android进阶之旅------>四种呼叫转移场景

    运行商为我们提供了如下4中呼叫转移场景: 1.始终进行呼叫转移:不管当前手机处于何种状态,来电都会被转移到指定的电话号码上.在使用这种呼叫转移时应当非常小心,如果启用了这种呼叫转移,你可就永远也接不着 ...

  8. Android系统移植与调试之------->如何修改Android自带的apk出现一圈圈类似鸡蛋的花纹

    最近被一个问题烦恼到了,就是android4.1系统自带的Email.文件管理器.信息等apk都出现同一个问题,就是现实在平板上的时候会出现一圈圈类似鸡蛋的花纹. 我想了两种方法来解决,第一种方法没有 ...

  9. python+NLTK 自然语言学习处理四:获取文本语料和词汇资源

    在前面我们通过from nltk.book import *的方式获取了一些预定义的文本.本章将讨论各种文本语料库 1 古腾堡语料库 古腾堡是一个大型的电子图书在线网站,网址是http://www.g ...

  10. HTTP 304 详解

    把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存.因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面 ...