用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
相關推薦
用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 se
Effective_STL 學習筆記(二十七) 用 distance 和 advance 把 const_iterator 轉化成 iterator
並不存在從 const_iterator 到 iterator 之間的隱式轉換 一種安全的、可移植的方法獲取他所對應的 iterator: 1 typedef deque<int> IntDeque; // 方便的typedef 2 typedef Int
vue+webpack把px轉化成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實現map轉成XML格式
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
利用Gson把json轉化成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") []
用itext把html轉成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