1. 程式人生 > >用XStream把Map轉化成xml的例子

用XStream把Map轉化成xml的例子

Dear reader,
I am writing an article today on how to convert a Map to XML and Vice-versa in Java.
I have tried to put nested Map examples too, which is serialized in a String Key,Value pair. Third party libraries are from 
XStream team, which are very popular in Industry for the same.
I hope you will find it useful. Some tweaking may be required to suit your purpose but the below mentioned all
examples are tested by me and runs fine. So enjoy reading and experimenting from where I have left here...

Contents:
1) Plain Java code to convert a Map to an XML.
2) Java code using Third party libraries to convert into XML and Vice-Versa.
3) Again using same Third party libraries as point-2 above but a complex converter.
4) Nested Map contents and conversion into XML.
5) Reference link.
6) Required Jars for third party libraries.


1) Plain Java code to convert a Map to an XML
First I am writing a very simple program to convert a Map to an XML as below: import java.util.HashMap; import java.util.Map; public class MagicAPI { public static void main(String[] args) { Map<String,String> mp=new HashMap<String,String>(); //Map contains: EmpId,Name mp.put("197","Deepak kumar modi"); mp.put("198","Sweep panorama"); mp.put("199","HD Video"); //System.out.println(mp); String xml = covertToXML(mp,"root"); System.out.println("Result of converted map to xml:"); System.out.println(xml); } public static String covertToXML(Map<String, String> map, String root) { StringBuilder sb = new StringBuilder("<"); sb.append(root); sb.append(">"); for (Map.Entry<String, String> e : map.entrySet()) { sb.append("<"); sb.append(e.getKey()); sb.append(">"); sb.append(e.getValue()); sb.append("</"); sb.append(e.getKey()); sb.append(">"); } sb.append("</"); sb.append(root); sb.append(">"); return sb.toString(); } } //Output: Result of converted map to xml: <root><198>Sweep panorama</198><199>HD Video</199><197>Deepak kumar modi</197></root> 2) Java code using Third party libraries to convert into XML and Vice-Versa
//Two POJOs are required for this example, so please find below two simple classes: //Person.java public class Person { private String firstname; private String lastname; private PhoneNumber phone; private PhoneNumber fax; public Person(String fn,String ln){ setFirstname(fn); setLastname(ln); } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public PhoneNumber getPhone() { return phone; } public void setPhone(PhoneNumber phone) { this.phone = phone; } public PhoneNumber getFax() { return fax; } public void setFax(PhoneNumber fax) { this.fax = fax; } public String toString(){ StringBuffer sb=new StringBuffer(); sb.append(getFirstname()).append(","); sb.append(getLastname()).append(","); //sb.append(getPhone().getCode()).append(","); //sb.append(getPhone().getNumber()).append(","); return sb.toString(); } } //PhoneNumber.java public class PhoneNumber { private int code; private String number; public PhoneNumber(int i, String string) { setCode(i); setNumber(string); } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } } //Main program: SimpleConverter.java, please check at the end for these supportive jar files. import java.io.File; import java.io.FileOutputStream; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.StaxDriver; public class SimpleConverter { public static void main(String[] args) throws Exception { Person me = new Person("Deepak", "Modi"); me.setPhone(new PhoneNumber(91, "991647****")); me.setFax(new PhoneNumber(80, "23658***")); XStream xstream = new XStream(new DomDriver()); //This will parse like a complete xml //XStream xstream = new XStream(new StaxDriver()); //This will parse into a String format, however this is also xml xstream.alias("person", Person.class); xstream.alias("phonenumber", PhoneNumber.class); String xml = xstream.toXML(me); System.out.println("Newly generated xml.."); System.out.println(xml); FileOutputStream fos=new FileOutputStream(new File("person.xml")); fos.write(xml.getBytes()); System.out.println("\n...XML file generation is done too, check your directory.."); System.out.println("Now we will read from XML, check below output: toString() method in Person class..."); Person duplicateMe = (Person)xstream.fromXML(xml); System.out.println("Output: "+duplicateMe); } } //Output, along with below content a "person.xml" will be created too: Newly generated xml.. <person> <firstname>Deepak</firstname> <lastname>Modi</lastname> <phone> <code>91</code> <number>991647****</number> </phone> <fax> <code>80</code> <number>23658***</number> </fax> </person> ...XML file generation is done too, check your directory.. Now we will read from XML, check below output: toString() method in Person class... Output: Deepak,Modi, 3) Again using same Third party libraries as point-2 above but a complex converter
//MapToXmlConverter.java import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class MapToXmlConverter { public static void main(String[] args) throws Exception { Map<String,String> mp=new HashMap<String,String>(); //Map contains: EmpId,Name mp.put("197","Deepak kumar modi"); mp.put("198","Sweep panorama"); mp.put("199","HD Video"); mp.put("200","My Motorola Mobile"); //System.out.println(mp); XStream magicApi = new XStream(); magicApi.alias("root", Map.class); magicApi.registerConverter(new MapEntryConverter()); String xml = magicApi.toXML(mp); System.out.println("Result of newly formed Xml:"); System.out.println(xml); } public static class MapEntryConverter implements Converter { public boolean canConvert(Class clazz) { return AbstractMap.class.isAssignableFrom(clazz); } public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { AbstractMap map = (AbstractMap) value; for (Object obj : map.entrySet()) { Entry entry = (Entry) obj; writer.startNode(entry.getKey().toString()); writer.setValue(entry.getValue().toString()); writer.endNode(); } } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Map<String, String> map = new HashMap<String, String>(); while(reader.hasMoreChildren()) { reader.moveDown(); map.put(reader.getNodeName(), reader.getValue()); reader.moveUp(); } return map; } } } //Output: Result of newly formed Xml: <root> <198>Sweep panorama</198> <199>HD Video</199> <200>My Motorola Mobile</200> <197>Deepak kumar modi</197> </root> 4) Nested Map contents and conversion into XML //NestedMapToXmlConverter.java import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class NestedMapToXmlConverter { public NestedMapToXmlConverter(){ System.out.println("Constructor invoked.."); } public static void main(String[] args) { Map mp=new HashMap(); Map nestedMap=new HashMap(); Map nestedNestedMap=new HashMap(); //Map contains: EmpId,Name mp.put("197","Deepak kumar modi"); mp.put("198","Sweep panorama"); mp.put("199","HD Video"); mp.put("200","My Motorola Mobile"); //System.out.println(mp); //nestedMap contains: FirstName, LastName nestedMap.put("Deepak", "Modi"); nestedMap.put("Sweep", "panorama"); //NestedNestedMap contains: FN,Name nestedNestedMap.put("FN", "DEEPAK"); nestedNestedMap.put("Object", new NestedMapToXmlConverter()); nestedMap.put("NestedNestedMap", nestedNestedMap); mp.put("NestedMap", nestedMap); XStream magicApi = new XStream(); magicApi.alias("root", Map.class); magicApi.registerConverter(new MapEntryConverter()); String xml = magicApi.toXML(mp); System.out.println("Result of newly formed XML:"); System.out.println(xml); } public static class MapEntryConverter implements Converter { public boolean canConvert(Class clazz) { return AbstractMap.class.isAssignableFrom(clazz); } public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { AbstractMap map = (AbstractMap) value; for (Object obj : map.entrySet()) { Entry entry = (Entry) obj; //System.out.println(entry.getValue().toString()); writer.startNode(entry.getKey().toString()); writer.setValue(entry.getValue().toString()); writer.endNode(); } } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Map<String, String> map = new HashMap<String, String>(); while(reader.hasMoreChildren()) { reader.moveDown(); map.put(reader.getNodeName(), reader.getValue()); reader.moveUp(); } return map; } } } //Output; Constructor invoked.. Result of newly formed XML: <root> <198>Sweep panorama</198> <199>HD Video</199> <200>My Motorola Mobile</200> <NestedMap>{Sweep=panorama, NestedNestedMap={FN=DEEPAK, [email protected]}, Deepak=Modi}</NestedMap> <197>Deepak kumar modi</197> </root> 5) For reference please check: http://xstream.codehaus.org/converter-tutorial.html 6) Required Jars for third party libraries: These below jars can be downloaded from Internet. xstream-1.4.2.jar kxml2-2.3.0.jar

相關推薦

XStreamMap化成xml例子

Dear reader, I am writing an article today on how to convert a Map to XML and Vice-versa in Java. I have tried to put nested Map examples too, which is se

Effective_STL 學習筆記(二十七) distance 和 advance const_iterator 化成 iterator

  並不存在從 const_iterator 到 iterator 之間的隱式轉換 一種安全的、可移植的方法獲取他所對應的 iterator: 1   typedef deque<int> IntDeque;     // 方便的typedef 2   typedef Int

vue+webpackpx化成rem的實戰例子

第一,首先需要本地安裝node環境和配置。 第二,npm全域性安裝vue-cli。 第三,通過vue的腳手架初始化本地專案 vue init webapck  project-name 這裡會自動安裝基礎依賴,先npn run dev一下,是否執行正常! 第四,安裝

spark1.6使用:讀取本地外部資料,RDD化成DataFrame,儲存為parquet格式,讀取csv格式

一、先開啟Hadoop和spark 略 二、啟動spark-shell spark-shell --master local[2] --jars /usr/local/src/spark-1.6.1-bin-hadoop2.6/libext/com.mysql.jdbc.Driver.j

JAXB 深入顯出 - JAXB 教程 Map 化為XML

摘要: JAXB 作為JDK的一部分,能便捷地將Java物件與XML進行相互轉換,本教程從實際案例出發來講解JAXB 2 的那些事兒。完整版目錄 前情回顧 上節介紹的是關於List的轉換方式,這一節開始,將基於Map這種資料型別做轉換。 Java 物件中含有 Map 這裡

JAVA實現mapXML格式

JAVA實現map集合轉成XML格式 例如: 程式碼塊 import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.d

Java程式碼 json格式資料化成xml jsonToXml

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.Iterator; import java

Java代碼 json格式數據化成xml jsonToXml

exce size iba ram turn except .get pub next() import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibab

spark讀取日誌檔案,RDD化成DataFrame

一、先開啟Hadoop和spark 略 二、啟動spark-shell spark-shell --master local[2] --jars /usr/local/src/spark-1.6.1-bin-hadoop2.6/libext/com.mysql.jdbc

JAXB 教程 Map 化為XML

摘要: JAXB 作為JDK的一部分,能便捷地將Java物件與XML進行相互轉換,本教程從實際案例出發來講解JAXB 2 的那些事兒。完整版目錄 前情回顧 上節介紹的是關於List的轉換方式,這一節開始,將基於Map這種資料型別做轉換。 Java 物件中含有 M

利用Gsonjson化成Java List異常問題

Java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to ….. 我需要把一串json轉化成Java List 最初是這樣寫的: private List<Co

利用POI將Excel化成XML檔案

一、導包       <dependency>             <groupId>dom4j</groupId>             <artifactId>dom4j</artifactId>   

java物件化成流,和流轉化成物件(包含clone機制+序列化機制)

類如下,這裡為了測試 僅僅用了內部類class Book implements Serializable { int i = 1; }物件轉化成位元組Book b = new Book(); B

JAVA 將xml Schema 文件化成 XML檔案

 首先從https://jaxb.java.net/2.2.11/ 獲取最新的jaxb 類這裡提供一個Schema文件<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefaul

fastjson物件化成json避免$ref

轉:http://blog.csdn.net/mephistodemon1/article/details/19118493 DisableCircularReferenceDetect來禁止迴圈引用檢測: JSON.toJSONString(..., Seriali

PHP記錄url中的引數全部轉化成陣列,還有陣列化成url引數連結

由於經常對接其他平臺。常常會用到get請求過來的超長引數字串。所以記錄一下這方法。/** * url引數轉化成陣列 * @auth xieyang * @date 2018年5月10日 13:51:23 * @param string * @return mixed

最快速nodelist化成array的方法

var divs = document.querySelectorAll("div") Array.prototype.slice.call(divs); 或者 var divs = document.querySelectorAll("div") []

itexthtml成pdf,帶圖片

很久以前使用itext轉換html到pdf過,但當時沒記錄,最近又有這種需求,一直沒想起來,現在做好了記錄一下 下面是虛擬碼: 依賴jar包及版本:                 <groupId>com.lowagie</groupId>  

rest介面訪問webService soap介面 XStream javabean和xml的互

建立javabean ,RequestCommonFPKJ @XStreamAlias("REQUEST_COMMON_FPKJ") public class RequestCommonFPKJ { @XStreamAsAttribute    //子元

要考三級了!我Python有道詞典單詞化成EXCEL!答題小助手

  import xml.etree.ElementTree as ET import pandas as pd import numpy as np tree = ET.parse('words.xml') root = tree.getroot() words = pd.Da