xml中所有元素转化为map

package demo;

import java.io.ByteArrayInputStream;

import java.io.UnsupportedEncodingException;

import java.util.Iterator;

import java.util.Map;

/*

*dom4j

*/

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import com.google.common.collect.Maps;

/**

*

* @author wangqm1

*

* 程序功能是:实现将xml格式的报文转化成map格式

*

* 1、首先调用setGenerateXML()方方法组装成xml,然后调用dom4jAnalyze()将所有元素转化为map

*

*/

public class ParseXML {

public static void main(String[] args) {

try {

System.out.println(dom4jAnalyze(setGenerateXML()));

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("不支持此编码格式");

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("不能生成Document");

}

}

static Map<String, String> dom4jAnalyze(String parameter)

throws DocumentException, UnsupportedEncodingException {

Map<String, String> map = Maps.newConcurrentMap();

// 创建SAXReader读取器,专门用于读取xml

Document doc = new SAXReader().read(new ByteArrayInputStream(parameter

.getBytes("GBK")));

Iterator<?> it = doc.getRootElement().elementIterator();

while (it.hasNext()) {

Element el = (Element) it.next();

map.put(el.getName(), el.getText());

Iterator<?> child = el.elementIterator();

while (child.hasNext()) {

Element ele = (Element) child.next();

map.put(ele.getName(), ele.getText());

Iterator<?> eleChild = ele.elementIterator();

while (eleChild.hasNext()) {

Element chel = (Element) eleChild.next();

map.put(chel.getName(), chel.getText());

}

}

}

return map;

}

private static String setGenerateXML() {

Document doc = setDocument() ;

Element ele = doc.addElement("stream");

Element E3RDPAYNO = ele.addElement("E3RDPAYNO");

E3RDPAYNO.setText("100599");

Element ORDERMODE = ele.addElement("ORDERMODE");

ORDERMODE.setText("01");

Element ORDERDATE = ele.addElement("ORDERDATE");

ORDERDATE.setText("null");

Element ORDERTIME = ele.addElement("ORDERTIME");

ORDERTIME.setText("12:30:02");

Element ORDERNO = ele.addElement("ORDERNO");

ORDERNO.setText("123456");

Element CURRID = ele.addElement("CURRID");

CURRID.setText("01");

Element ORDERAMT = ele.addElement("ORDERAMT");

ORDERAMT.setText("100");

Element MEMO = ele.addElement("MEMO");

MEMO.setText("");

Element NOTIFYMODE = ele.addElement("NOTIFYMODE");

NOTIFYMODE.setText("01");

Element NOTIFYURL = ele.addElement("NOTIFYURL");

NOTIFYURL.setText("http://106.39.35.10/finExchange/cncbpay/back");

Element RISKLEVEL = ele.addElement("RISKLEVEL");

RISKLEVEL.setText("00");

Element SUPPTCARDTYPE = ele.addElement("SUPPTCARDTYPE");

SUPPTCARDTYPE.setText("01");

Element TTL = ele.addElement("TTL");

TTL.setText("0NOTIFYSCOPE");

Element MEMBERID = ele.addElement("MEMBERID");

MEMBERID.setText("Y");

Element NOTIFYSCOPE = ele.addElement("NOTIFYSCOPE");

NOTIFYSCOPE.setText("01");

Element ISSAFEINF = ele.addElement("ISSAFEINF");

ISSAFEINF.setText("Y");

Element REFERER = ele.addElement("REFERER");

REFERER.setText("pay.ucfpay.com");

return doc.asXML().replace("\n", "");

}

private static Document setDocument() {

Document doc = DocumentHelper.createDocument();

doc.setXMLEncoding("GBK");

// doc.setXMLEncoding("UTF-8");

return doc;

}

}

时间: 2024-08-10 23:17:49

xml中所有元素转化为map的相关文章

Maven pom.xml中的元素modules、parent、properties以及import

前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它来谈谈那些不同的地方: 给我印象最深的就是如下四个元素:modules.parent.properties.import. modules 从字面意思来说,module就是模块,而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块:如果maven用的比较简单,或者说项目的模

Java使用XPath查询XML中的元素

使用java中的xpath语法查询xml中元素 1.查询的xml文件为student.xml文件 <?xml version="1.0" encoding="UTF-8" ?><students> <student class="1201">  <name>李小离</name>  <sex>男</sex>  <age>25</age> &l

web.xml中常用元素的解读

前言 针对一个项目而言,通常会有几类XML文件需要书写. web.xml spring-context.xml spring-mvc.xml other.xml ... 不管有多少配置文件,可以肯定的一点,这些配置文件,都是在web.xml中被指定的. 后续慢慢阐述. web.xml web.xml可以理解为一个Java Web项目入口.在web.xml中通常会有如下几种类型的节点存在,按照加载顺序排列. Listener 此为监听器,在上面3个中是后弦加载的,表示监听某个动作是否发生,发生后要

dom4j解析xml中指定元素下内容

需求:XML为如下样式,现在我只想取得timer下面的5000和60000. 解决办法如下: <?xml version="1.0" encoding="UTF-8"?> <we> <message id="1001"> <String>Id</String> <String>name</String> <String>sfz</String&g

tomcat server.xml 中 host 元素

测试偶然发现: <Host name="127.0.0.1" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost

Android XML中引用自定义内部类view的四个why

今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类view的规则 本文主要是总结why,所以先把XML布局文件中引用内部类的自定义view的做法摆出来,有四点: 自定义的类必须是静态类: 使用view作为XML文件中的tag,注意,v是小写字母,小写字母v,小写字母v: 添加class属性,注意,没有带android:命名空间的,表明该自定义view

xml中该使用属性还是元素

XML 中没有规定哪些必须放在属性或者子元素,因此使用哪种方式都是可以实现的.这取决于个人的经验和喜好.在可以使用元素也可以使用属性的两选一的情况下,个人更倾向于使用子元素.主要理由如下: 1. 属性不易扩展,只能支持简单数据类型.如果要定义的数据项将来可能扩展为复杂数据对象时,则应毫不犹豫地使用子元素. 2. 子元素在XML文档中更容易解析. 3. 相对属性定义方式,用元素来定义会显的更正式更重要. 4. 人看起来,用元素定义的文档比属性定义的文档更好理解. 什么时候使用属性来定义信息呢?个人

随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value

利用Java提供的Random类.从List或Set中随机取出一个元素,从Map中随机获取一个key或value. 因为Set没有提供get(int index)方法,仅仅能先获取一个随机数后.利用一个计数器,对Set进行循环,当计数器等于随机数时返回当前元素,对于Map的处理也类似. 不知有没有更好的方法-- package com.xjj.util; import java.util.List; import java.util.Map; import java.util.Set; impo

在Struts.xml中的result元素指的是:指定动作类的动作方法执行完后的结果视图.

result结果集 上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集 在Struts.xml中的result元素指的是:指定动作类的动作方法执行完后的结果视图. (1)局部结果和全局结果 他有两个属性: name:字符串,与动作方法返回的值一致.默认是success type:指定处理结果的结果类型的别名.默认值是dispatcher 首先处理结果分为两种,一种是局部结果一种是全局结果. 局部结果: <action name="lo