java根据map组xml_java把xml转map

传过来一个xml文件,需要转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.

转换规则:

1.主要是Map与List的互相嵌套

2.同名称的节点会被装进List

Xml代码 a4c26d1e5885305701be709a3d33442f.png

version="1.0"

encoding="UTF-8"?>

2

test@corp.gm.com

tom

XML-未来世界

Message

xml-tom

xml-test@163.com

xml-gm

xml-hello

guys

http://china.gm.com

gm中文站

gm中文站desc

gm中文站desc2

gm中文站desc3

gm中文站desc4

products

http://www.gm.com

gm

gmdesc

http://china.gm.com/pics/com.cn.gm/story/frsc.jpg

黄晓豫

attach-desc1

attach-desc2

attach-desc3

attach-desc4

http://china.gm.com/pics/com.cn.gm/story/wr.jpg

张中汉

attach-desc1

attach-desc2

attach-desc1

attach-desc2

desc_item_1

desc_item_2

desc_item_3

desc_item_4

desc_item_5

encoding="UTF-8"?>

2

test@corp.gm.com

tom

XML-未来世界

Message

xml-tom

xml-test@163.com

xml-gm

xml-hello

guys

http://china.gm.com

gm中文站

gm中文站desc

gm中文站desc2

gm中文站desc3

gm中文站desc4

products

http://www.gm.com

gm

gmdesc

http://china.gm.com/pics/com.cn.gm/story/frsc.jpg

黄晓豫

attach-desc1

attach-desc2

attach-desc3

attach-desc4

http://china.gm.com/pics/com.cn.gm/story/wr.jpg

张中汉

attach-desc1

attach-desc2

attach-desc1

attach-desc2

desc_item_1

desc_item_2

desc_item_3

desc_item_4

desc_item_5

转换后的的Map(转换成字符串的效果):

Java代码 a4c26d1e5885305701be709a3d33442f.png

{message=XML-未来世界 Message,

selected_items={items_source=products,

item_group=[{item_name=gm中文站, item_desc=gm中文站desc,

item_desc2=gm中文站desc2, item_desc4=gm中文站desc4,

item_url=http://china.gm.com, item_desc3=gm中文站desc3},

{item_name=gm, item_desc=gmdesc, item_url=http://www.gm.com}]},

to_alias=tom, desc_group={desc_item=[desc_item_1, desc_item_2,

desc_item_3, desc_item_4, desc_item_5]}, sender_comp_name=xml-gm,

subject=xml-hello guys, to_address=test@corp.gm.com, template_id=2,

attachments={attachment-group=[{attachment_url=http://china.gm.com/pics/com.cn.gm/story/frsc.jpg,

attachment_name=黄晓豫, attachment_desc={desc3=attach-desc3,

desc4=attach-desc4, desc1=attach-desc1, desc2=attach-desc2}},

{attachment_url=http://china.gm.com/pics/com.cn.gm/story/wr.jpg,

attachment_name=张中汉, attachment_desc=[{desc1=attach-desc1,

desc2=attach-desc2}, {desc1=attach-desc1, desc2=attach-desc2}]}]},

recipient_name=xml-tom,

send_address=xml-test@163.com}

{message=XML-未来世界 Message, selected_items={items_source=products,

item_group=[{item_name=gm中文站, item_desc=gm中文站desc,

item_desc2=gm中文站desc2, item_desc4=gm中文站desc4,

item_url=http://china.gm.com, item_desc3=gm中文站desc3},

{item_name=gm, item_desc=gmdesc, item_url=http://www.gm.com}]},

to_alias=tom, desc_group={desc_item=[desc_item_1, desc_item_2,

desc_item_3, desc_item_4, desc_item_5]}, sender_comp_name=xml-gm,

subject=xml-hello guys, to_address=test@corp.gm.com, template_id=2,

attachments={attachment-group=[{attachment_url=http://china.gm.com/pics/com.cn.gm/story/frsc.jpg,

attachment_name=黄晓豫, attachment_desc={desc3=attach-desc3,

desc4=attach-desc4, desc1=attach-desc1, desc2=attach-desc2}},

{attachment_url=http://china.gm.com/pics/com.cn.gm/story/wr.jpg,

attachment_name=张中汉, attachment_desc=[{desc1=attach-desc1,

desc2=attach-desc2}, {desc1=attach-desc1, desc2=attach-desc2}]}]},

recipient_name=xml-tom, send_address=xml-test@163.com}

xml处理用的dom4j

下面是实现转换的主要类XmlUtils:

Java代码 a4c26d1e5885305701be709a3d33442f.png

package

xml.dom4j;

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.Element;

public

class XmlUtils

{

public

static

Map

Dom2Map(Document doc){

Map map

= new

HashMap

Object>();

if(doc

== null)

return

map;

Element root = doc.getRootElement();

for (Iterator

iterator = root.elementIterator(); iterator.hasNext();)

{

Element e = (Element) iterator.next();

//System.out.println(e.getName());

List list = e.elements();

if(list.size()

> 0){

map.put(e.getName(), Dom2Map(e));

}else

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

}

return

map;

}

public

static Map

Dom2Map(Element e){

Map map = new

HashMap();

List list = e.elements();

if(list.size()

> 0){

for

(int i =

0;i

< list.size(); i++) {

Element iter = (Element) list.get(i);

List mapList = new

ArrayList();

if(iter.elements().size()

> 0){

Map m = Dom2Map(iter);

if(map.get(iter.getName())

!= null){

Object obj = map.get(iter.getName());

if(!obj.getClass().getName().equals("java.util.ArrayList")){

mapList = new

ArrayList();

mapList.add(obj);

mapList.add(m);

}

if(obj.getClass().getName().equals("java.util.ArrayList")){

mapList = (List) obj;

mapList.add(m);

}

map.put(iter.getName(), mapList);

}else

map.put(iter.getName(), m);

}

else{

if(map.get(iter.getName())

!= null){

Object obj = map.get(iter.getName());

if(!obj.getClass().getName().equals("java.util.ArrayList")){

mapList = new

ArrayList();

mapList.add(obj);

mapList.add(iter.getText());

}

if(obj.getClass().getName().equals("java.util.ArrayList")){

mapList = (List) obj;

mapList.add(iter.getText());

}

map.put(iter.getName(), mapList);

}else

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

}

}

}else

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

return

map;

}

}

package xml.dom4j;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.Element;public class XmlUtils {

public static Map

Dom2Map(Document doc){ Map

Object> map = new HashMap

Object>(); if(doc == null) return map; Element root

= doc.getRootElement(); for (Iterator iterator =

root.elementIterator(); iterator.hasNext();) { Element e =

(Element) iterator.next(); //System.out.println(e.getName()); List

list = e.elements(); if(list.size() > 0){

map.put(e.getName(), Dom2Map(e)); }else map.put(e.getName(),

e.getText()); } return map; } public static Map Dom2Map(Element e){

Map map = new HashMap(); List list = e.elements(); if(list.size()

> 0){ for (int i = 0;i < list.size();

i++) { Element iter = (Element) list.get(i); List mapList = new

ArrayList(); if(iter.elements().size() > 0){ Map m =

Dom2Map(iter); if(map.get(iter.getName()) != null){ Object obj =

map.get(iter.getName());

if(!obj.getClass().getName().equals("java.util.ArrayList")){

mapList = new ArrayList(); mapList.add(obj); mapList.add(m); }

if(obj.getClass().getName().equals("java.util.ArrayList")){ mapList

= (List) obj; mapList.add(m); } map.put(iter.getName(), mapList);

}else map.put(iter.getName(), m); } else{

if(map.get(iter.getName()) != null){ Object obj =

map.get(iter.getName());

if(!obj.getClass().getName().equals("java.util.ArrayList")){

mapList = new ArrayList(); mapList.add(obj);

mapList.add(iter.getText()); }

if(obj.getClass().getName().equals("java.util.ArrayList")){ mapList

= (List) obj; mapList.add(iter.getText()); }

map.put(iter.getName(), mapList); }else map.put(iter.getName(),

iter.getText()); } } }else map.put(e.getName(), e.getText());

return map; }}

下面是一个创建xml的类(不重要,可以忽略,只是用来生成一个xml以便测试,可以自己写)

Java代码 a4c26d1e5885305701be709a3d33442f.png

package

xml.dom4j;

import

org.dom4j.Document;

import

org.dom4j.DocumentHelper;

import

org.dom4j.Element;

public

class CreateXml

{

public

static

void

main(String[] args) {

// TODO Auto-generated

method stub

}

public Document

createXml(){

Document doc =

DocumentHelper.createDocument();

Element e = doc.addElement("GmMail");

e.addElement("template_id").setText("2");

e.addElement("to_address").setText("test@corp.gm.com");

e.addElement("to_alias").setText("tom");

e.addElement("message").setText("XML-未来世界

Message");

e.addElement("recipient_name").setText("xml-tom");

e.addElement("send_address").setText("xml-test@163.com");

e.addElement("sender_comp_name").setText("xml-gm");

e.addElement("subject").setText("xml-hello

guys");

Element Selecteditems =

e.addElement("selected_items");

Element itemsGroup =

Selecteditems.addElement("item_group");

//Element item =

itemsGroup.addElement("item");

itemsGroup.addElement("item_url").setText("http://china.gm.com");

itemsGroup.addElement("item_name").setText("gm中文站");

itemsGroup.addElement("item_desc").setText("gm中文站desc");

itemsGroup.addElement("item_desc2").setText("gm中文站desc2");

itemsGroup.addElement("item_desc3").setText("gm中文站desc3");

itemsGroup.addElement("item_desc4").setText("gm中文站desc4");

Selecteditems.addElement("items_source").setText("products");

itemsGroup =

Selecteditems.addElement("item_group");

itemsGroup.addElement("item_url").setText("http://www.gm.com");

itemsGroup.addElement("item_name").setText("gm");

itemsGroup.addElement("item_desc").setText("gmdesc");

Element attachment =

e.addElement("attachments");

Element attachmentGroup =

attachment.addElement("attachment-group");

attachmentGroup.addElement("attachment_url").setText("http://china.gm.com/pics/com.cn.gm/story/frsc.jpg");

attachmentGroup.addElement("attachment_name").setText("黄晓豫");

Element attachmentDesc =

attachmentGroup.addElement("attachment_desc");

attachmentDesc.addElement("desc1").setText("attach-desc1");

attachmentDesc.addElement("desc2").setText("attach-desc2");

attachmentDesc.addElement("desc3").setText("attach-desc3");

attachmentDesc.addElement("desc4").setText("attach-desc4");

attachmentGroup =

attachment.addElement("attachment-group");

attachmentGroup.addElement("attachment_url").setText("http://china.gm.com/pics/com.cn.gm/story/wr.jpg");

attachmentGroup.addElement("attachment_name").setText("张中汉");

attachmentDesc =

attachmentGroup.addElement("attachment_desc");

attachmentDesc.addElement("desc1").setText("attach-desc1");

attachmentDesc.addElement("desc2").setText("attach-desc2");

attachmentDesc =

attachmentGroup.addElement("attachment_desc");

attachmentDesc.addElement("desc1").setText("attach-desc1");

attachmentDesc.addElement("desc2").setText("attach-desc2");

Element descGroup =

e.addElement("desc_group");

descGroup.addElement("desc_item").setText("desc_item_1");

descGroup.addElement("desc_item").setText("desc_item_2");

descGroup.addElement("desc_item").setText("desc_item_3");

descGroup.addElement("desc_item").setText("desc_item_4");

descGroup.addElement("desc_item").setText("desc_item_5");

return

doc;

}

}

package xml.dom4j;import org.dom4j.Document;import

org.dom4j.DocumentHelper;import org.dom4j.Element;public class

CreateXml { public static void main(String[] args) { // TODO

Auto-generated method stub } public Document createXml(){ Document

doc = DocumentHelper.createDocument(); Element e =

doc.addElement("GmMail"); e.addElement("template_id").setText("2");

e.addElement("to_address").setText("test@corp.gm.com");

e.addElement("to_alias").setText("tom");

e.addElement("message").setText("XML-未来世界 Message");

e.addElement("recipient_name").setText("xml-tom");

e.addElement("send_address").setText("xml-test@163.com");

e.addElement("sender_comp_name").setText("xml-gm");

e.addElement("subject").setText("xml-hello guys"); Element

Selecteditems = e.addElement("selected_items"); Element itemsGroup

= Selecteditems.addElement("item_group"); //Element item =

itemsGroup.addElement("item");

itemsGroup.addElement("item_url").setText("http://china.gm.com");

itemsGroup.addElement("item_name").setText("gm中文站");

itemsGroup.addElement("item_desc").setText("gm中文站desc");

itemsGroup.addElement("item_desc2").setText("gm中文站desc2");

itemsGroup.addElement("item_desc3").setText("gm中文站desc3");

itemsGroup.addElement("item_desc4").setText("gm中文站desc4");

Selecteditems.addElement("items_source").setText("products");

itemsGroup = Selecteditems.addElement("item_group");

itemsGroup.addElement("item_url").setText("http://www.gm.com");

itemsGroup.addElement("item_name").setText("gm");

itemsGroup.addElement("item_desc").setText("gmdesc"); Element

attachment = e.addElement("attachments"); Element attachmentGroup =

attachment.addElement("attachment-group");

attachmentGroup.addElement("attachment_url").setText("http://china.gm.com/pics/com.cn.gm/story/frsc.jpg");

attachmentGroup.addElement("attachment_name").setText("黄晓豫");

Element attachmentDesc =

attachmentGroup.addElement("attachment_desc");

attachmentDesc.addElement("desc1").setText("attach-desc1");

attachmentDesc.addElement("desc2").setText("attach-desc2");

attachmentDesc.addElement("desc3").setText("attach-desc3");

attachmentDesc.addElement("desc4").setText("attach-desc4");

attachmentGroup = attachment.addElement("attachment-group");

attachmentGroup.addElement("attachment_url").setText("http://china.gm.com/pics/com.cn.gm/story/wr.jpg");

attachmentGroup.addElement("attachment_name").setText("张中汉");

attachmentDesc = attachmentGroup.addElement("attachment_desc");

attachmentDesc.addElement("desc1").setText("attach-desc1");

attachmentDesc.addElement("desc2").setText("attach-desc2");

attachmentDesc = attachmentGroup.addElement("attachment_desc");

attachmentDesc.addElement("desc1").setText("attach-desc1");

attachmentDesc.addElement("desc2").setText("attach-desc2"); Element

descGroup = e.addElement("desc_group");

descGroup.addElement("desc_item").setText("desc_item_1");

descGroup.addElement("desc_item").setText("desc_item_2");

descGroup.addElement("desc_item").setText("desc_item_3");

descGroup.addElement("desc_item").setText("desc_item_4");

descGroup.addElement("desc_item").setText("desc_item_5"); return

doc; }}

下面是main调用类:

Java代码 a4c26d1e5885305701be709a3d33442f.png

package

xml.dom4j;

import

java.util.Map;

import

org.dom4j.Document;

public

class Demo

{

public

static

void

main(String[] args){

CreateXml create = new

CreateXml();

Document doc = create.createXml();

String strXml = doc.asXML();

System.out.println(strXml);

Map map = XmlUtils.Dom2Map(doc);

System.out.println(map.toString());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值