xml转换成map

来源:互联网 发布:芒果tv有mac版吗 编辑:程序博客网 时间:2024/05/19 23:15
package com;


import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;


public class TestreadLoadxml {


/**
* 解析字符串中 xml 文件
*/


public static void main(String[] args) throws Exception, IOException {


String returnxml =  
     "<root>" 
   + "<head><version>1.0</version>"
+ "<tran_code>BEAI0077</tran_code>"
+ "<branch_no>9901</branch_no>"
+ "<teller_id>M1111</teller_id>"
+ "<channel_id>CRM</channel_id><sys_id>f00</sys_id>"
+ "<req_sys_id>f00</req_sys_id>"
+ "<send_date>20150821</send_date>"
+ "<send_time>155740</send_time>"
+ "<msg_seq>2015082115574002464343</msg_seq>"
+ "<org_msg_seq>2015082018060000000002</org_msg_seq>" 
+ "</head>" 

+ "<body><error_code>00000000</error_code>"
+ "<error_text/><pckgsq/><err_sys_id/>"
+ "<bgnRecordNum>0</bgnRecordNum>"
+ "<endRecordNum>2</endRecordNum><inqrngCnt>0</inqrngCnt>"
+ "<retCnt>2</retCnt><ttlCnt>2</ttlCnt><list_count>2</list_count>" 

+ "<listEntity>" 
+ "<Entity>"
+ "<custno>0009146105</custno>"
+ "<acctno>000914610500037</acctno><acctna>海霞</acctna>"
+ "<onlnbl>50000.00</onlnbl><acctst>1</acctst>"
+ "<dtittp>SV02</dtittp><dtitcd>215105</dtitcd>"
+ "<crcycd>10</crcycd><blncdn>C</blncdn>" 
+ "</Entity>"
+ "<Entity>" 
+ "<custno>0009146105</custno>"
+ "<acctno>000914610500045</acctno><acctna>海霞</acctna>"
+ "<onlnbl>50000.00</onlnbl><acctst>1</acctst>"
+ "<dtittp>SV02</dtittp><dtitcd>215105</dtitcd>"
+ "<crcycd>10</crcycd><blncdn>C</blncdn>"
+ "</Entity>" 
+ "</listEntity>" 
+ "</body>" 
+ "</root>";


getXMLQMap(returnxml);
System.out.println("解析出来的头值" + rmap);
System.out.println("解析出来的体值" + mapp);
System.out.println("解析出来的客户list值" + listmap);


//转换成字符长度
String str = "张三";  
String s =  count(str);
System.out.println(s);


}


// 得到前置返回的xml
public static void getXMLQMap(String retMessage) {
Map<String, String> map = new HashMap<String, String>();
// 得到根节点
Element rootElement = getDocument(retMessage).getRootElement();
retQData(rootElement.getChildren(), map);
}


/**
* 递归解析获取返回XML数据
* <root>的子节点:<head>和<body>
*/


static Map<String, String> rmap = new HashMap<String, String>();// 存放头信息
static Map<String, String> mapp = null;
static List<Map<String, String>> listmap = new ArrayList<Map<String, String>>();


public static void retQData(List<Element> e, Map<String, String> map) {
// 做判断得到几个值


if (e.size() > 0 && e.get(0).getChildren().size() > 0) {
for (Element _e : e) {
retQData(_e.getChildren(), map);
}
} else {
for (Element _e : e) {
if (_e.getName().equals("listEntity")) {
retQData(_e.getChildren(), map);
} else {
if (_e.getName().equals("custno")) {

mapp = new HashMap<String, String>();// 存放客户体信息
for (Element _e1 : e) {
mapp.put(_e1.getName(), _e1.getText());
System.out.println(_e1.getName() + "<-->"+ _e1.getText());
if (_e1.getName().equals("blncdn")) {
break;
}
}
// 存放客户信息
listmap.add(mapp);
} else {
if (!(_e.getName().equals("custno"))|| !(_e.getName().equals("onlnbl"))|| !(_e.getName().equals("acctst"))|| !(_e.getName().equals("dtittp"))
|| !(_e.getName().equals("dtitcd"))||!(_e.getName().equals("crcycd"))|| !(_e.getName().equals("blncdn"))) {


rmap.put(_e.getName(), _e.getText());
System.out.println(_e.getName() + "<----->" + _e.getText());
}
}
}
}
}




}


// 得到document  把字符串 转换(解析)成   jdom 文档格式
public static org.jdom.Document getDocument(String retMessage) {

SAXBuilder builder = new SAXBuilder();
org.jdom.Document document = null;
StringReader sr = new StringReader(retMessage);
InputSource is = new InputSource(sr);

try {
document = builder.build(is);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return document;
}


public static String trim(String str) {
if (str == null)
return null;
return str.trim();
}




public static String count(String str) {
String bacStr = "";
if (str == null || str.length() == 0) {
return "00000000";
}

int count = 0;
char[] chs = str.toCharArray();
for (int i = 0; i < chs.length; i++) {
count += (chs[i] > 0xff) ? 2 : 1;
}






if ((count + "").length() < 8) {
int len = 8 - (count + "").length();
for (int i = 0; i < len; i++) {
bacStr = bacStr.concat("0");
}
}


System.out.println("拼接字符串:" + bacStr + count);
return bacStr + count;
}
}
0 0
原创粉丝点击