在java中使用dom4j包对String格式的xm数据l解析
在网上找了好久,都没搞出来,借鉴别人的代码,依葫芦画瓢,写了个自己用的解析类。注意节点属性和子节点的区别就好了,这个包的方法还挺好用的
package com.allinpay.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.tree.DefaultAttribute;
/**
* Java递归遍历XML所有元素
*
* @author 李许民
* @date 2017年1月16日15:01:14
*/
public class XMLparseUtil
{
//存储xml元素信息的容器
private static ArrayList<Leaf> elemList = new ArrayList<Leaf>();
/**
* 获取节点所有属性值
* <功能详细描述>
* @param element
* @return
* @see [类、类#方法、类#成员]
*/
public static Map<String, String> XMLparse(String xmlStr) {
XMLparseUtil xmLparseUtil = new XMLparseUtil();
Map<String, String> mapRerult = new HashMap<>();
Document doc = null;
try {
doc = DocumentHelper.parseText(xmlStr);
} catch (DocumentException e) {
e.printStackTrace();
}
// 获取XML根元素
Element root = doc.getRootElement();
xmLparseUtil.getElementList(root);
for (Leaf leaf : elemList) {
mapRerult.put(leaf.getElementName(), leaf.getValue());
}
return mapRerult;
}
/**
* 获取节点的属性
* @param element
* @return
*/
public String getNoteAttribute(Element element)
{
String xattribute = "";
DefaultAttribute e = null;
List<?> list = element.attributes();
for (int i = 0; i < list.size(); i++)
{
e = (DefaultAttribute)list.get(i);
xattribute += " [name = " + e.getName() + ", value = " + e.getText() + "]";
}
return xattribute;
}
/**
* 递归遍历方法
* <功能详细描述>
* @param element
* @see [类、类#方法、类#成员]
*/
public void getElementList(Element element)
{
List<?> elements = element.elements();
// 没有子元素
if (elements.isEmpty())
{
String xpath = element.getPath();
String value = element.getTextTrim();
elemList.add(new Leaf(getNoteAttribute(element),element.getName(), xpath, value));
}
else
{
// 有子元素
Iterator<?> it = elements.iterator();
while (it.hasNext())
{
Element elem = (Element)it.next();
// 递归遍历
getElementList(elem);
}
}
}
/**
* 解析测试
* @param args
* @throws DocumentException
*/
public static void main(String args[])
throws DocumentException
{
String testStr = "<?xml version='1.0' encoding='UTF-8'?>"
+ "<epay>"
+ "<retcode>0</retcode>"
+ "<sign_type>MD5</sign_type>"
+ "<service>query_order_service</service>"
+ "<service_version>1.0"
+ "</service_version>"
+ "<sign>82c9636fac495ceb0c378a36a6a43914</sign>"
+ "<input_charset>UTF-8</input_charset>"
+ "<fee_type>1</fee_type>"
+ "<attach>test</attach>"
+ "<bank_transno>123123123123123</bank_transno>"
+ "<out_trade_no>00000002</out_trade_no>"
+ "<total_fee>300</total_fee>"
+ "<product_fee>50</product_fee>"
+ "<transport_fee>50</transport_fee>"
+ "<discount>5.51</discount>"
+ "<reconciliation_state>false</reconciliation_state>"
+ "<time_end>20131005 17:10:49</time_end>"
+ "<trade_mode>0001</trade_mode>"
+ "<trade_state>0</trade_state>"
+ "<transaction_id>201310045</transaction_id>"
+ "</epay>";
Map<String, String> map = XMLparseUtil.XMLparse(testStr);
System.out.println(map);
}
}
/**
* xml节点数据结构
*/
class Leaf
{
// 节点属性
private String xattribute;
//节点名字
private String elementName;
// 节点PATH
private String xpath;
// 节点值
private String value;
public Leaf(String xattribute, String elementName , String xpath, String value)
{
this.xattribute = xattribute;
this.elementName=elementName;
this.xpath = xpath;
this.value = value;
}
public String getXpath()
{
return xpath;
}
public void setXpath(String xpath)
{
this.xpath = xpath;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
public String getXattribute()
{
return xattribute;
}
public void setXattribute(String xattribute)
{
this.xattribute = xattribute;
}
public String getElementName() {
return elementName;
}
public void setElementName(String elementName) {
this.elementName = elementName;
}
}
在java中使用dom4j包对String格式的xm数据l解析的更多相关文章
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing
java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...
- Java中的Dom4j
上一篇讲了Java中如何操作XML,现在介绍一个更厉害的方法,Dom4j ,百度查一下就知道,这个更强,更快,更简单. 自己下载jar包导入工具,下面来讲一个例子,我事先准备了一个XML文件,如下: ...
- JavaSE&&JavaEE&&JavaME的区别【Java中常用的包结构】
一.javaEEJavaSEJavaME用的同一个jar包吗? javaEE JavaSE javaME 用的JDK是同一个,开发j2SE工程的话只要有JDK就可以了,开发J2EE工程和J2ME工程除 ...
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...
- 全面解释java中StringBuilder、StringBuffer、String类之间的关系
StringBuilder.StringBuffer.String类之间的关系 java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,在上一篇博文中我 ...
- Java中equal和==区别及String创建过程
Java中equal和==区别 1.起因 在一段Java代码中,使用了两种实现方式. //第一种命令行输入 int main (String[] args) { if(args[0] == " ...
- JAVA中Integer.valueOf, parsetInt() String.valueOf的区别和结果
先来看段代码 public class IntegerDemo { public static void main(String[] args) { String num = null; System ...
- Java中常见的包
目录 JDK自带的包 第三方包 JDK自带的包 JAVA提供了强大的应用程序接口,既JAVA类库.他包含大量已经设计好的工具类,帮助程序员进行字符串处理.绘图.数学计算和网络应用等方面的工作.下面简单 ...
随机推荐
- WKWebView与Js交互
首先打开webstorm,将最下面h5拷贝到html中.然后导入工程 #define kMessageHandlerName @"mymobile" 1.创建配置类 - (WKWe ...
- php file取重复
function FetchRepeatMemberInArray($array) { // 获取去掉重复数据的数组 $unique_arr = array_unique ( $array ); // ...
- hdu_1253_胜利大逃亡(bfs+剪枝)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 题意:三维BFS,不解释 题解:DFS+剪枝会超时,裸BFS会超时,BFS+剪枝才能AC,有点伤 ...
- Infix expressions 中缀表达式
中缀表达式的计算 利用两个栈来实现,操作数栈,操作符栈 只支持个位数运算 最后必须输入一个'#' #include<iostream> using namespace std; templ ...
- 这一招让 Word 帮你自动生成文件目录,也能自动更新
学生的研究报告或是公司员工的提案企划书,为了务求严明详尽,往往是洋洋洒洒数十页或甚至上百页之多,像这样大篇幅的文件,在结构上通常会划分为好几个部分,比如像论文就会区分为封面.摘要.内文章节.参考文献等 ...
- listener、context、filter、servlet及其加载顺序
首先说加载顺序:context-param—>listener —> filter —> servlet 这四类加载顺序与配置顺序无关,对于每一类内部的加载顺序,与配置顺序有关: l ...
- Sql Server异常捕获 try catch
declare @num int begin try end try begin catch select ERROR_LINE() as 错误行数, ERROR_MESSAGE() as 错误消息 ...
- 修改config.php配置
$data=array( "name"=>"222222", "tel"=>159131, "address" ...
- linux的学习系列 3---目录
目录也是一个文件,它的唯一功能是用来保存文件及其相关信息.所有的文件,包括普通文件.设备文件和目录文件,都会被保存到目录中. 主目录 登录后,你所在的位置就是你的主目录(或登录目录),接下来你主要是在 ...
- 实战WEB 服务器(JAVA编写WEB服务器)
实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报 分类: ...