文档章节

Jackson转换XML

CrazyManDF
 CrazyManDF
发布于 2016/04/04 00:11
字数 744
阅读 529
收藏 11

##Jackson转换XML##

###依赖的jar包###

jackson-annotations-2.6.0.jar

jackson-core-2.6.3.jar

jackson-databind-2.6.3.jar

jackson-dataformat-xml-2.6.4.jar

jackson-module-jaxb-annotations-2.6.4.jar

stax2-api-3.1.4.jar

###XmlMapper和ToXmlGenerator###

XmlMapper

XmlMapper xmlMapper = new XmlMapper();

ToXmlGenerator

输出前需要flush(),使用后需要close

ToXmlGenerator xmlGenerator = xmlMapper.getFactory().createGenerator(System.out, JsonEncoding.UTF8);

if (xmlGenerator != null) {
        xmlGenerator.flush();
}
if (!xmlGenerator.isClosed()) {
    xmlGenerator.close();
}

POJO

AccountBean bean = new AccountBean();
bean.setAddress("china-Guangzhou");
bean.setEmail("hoojo_@126.com");
bean.setId(1);
bean.setName("hoojo");

###POJO转换成xml###

XmlMapper

 String xml = xmlMapper.writeValueAsString(bean);
 //或
 xmlMapper.writeValue(System.out, bean);

ToXmlGenerator

xmlGenerator.writeObject(bean);

输出:<AccountBean xmlns=""><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></AccountBean>

###xml转换成POJO###

 String xml = "<AccountBean xmlns=\"\"><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></AccountBean>";

 AccountBean accountBean = xmlMapper.readValue(xml, AccountBean.class);

###List转换成xml###

XmlMapper

 String xmlList = xmlMapper.writeValueAsString(list);
//或
xmlMapper.writeValue(System.out, list);

ToXmlGenerator

xmlGenerator.writeObject(list);

<ArrayList xmlns=""><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item></ArrayList>

###xml转换成数组###

String xmlList = "<ArrayList xmlns=""><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item></ArrayList>";

AccountBean[] beans = xmlMapper.readValue(xmlList,AccountBean[].class);

###xml转换成List###

String xmlList = "<ArrayList xmlns=\"\"><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item></ArrayList>";

JavaType listType = xmlMapper.getTypeFactory().constructParametrizedType(ArrayList.class, List.class, AccountBean.class);

ArrayList<AccountBean> list1 = xmlMapper.readValue(xmlList, listType);
for(int i=0; i<list1.size(); i++){
    System.out.println(list1.get(i));
}

###xml转换成List<Map>###

(所有的xml对象都会直接解析成LinkedHashMap)

  String xmlList = "<ArrayList xmlns=\"\"><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item><item><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></item></ArrayList>";

  List<LinkedHashMap<String,Object>> list2 = xmlMapper.readValue(xmlList, List.class);

  for(int i=0; i<list2.size(); i++){
    LinkedHashMap<String,Object> map = list2.get(i);
    Iterator<Map.Entry<String,Object>> entryIter = map.entrySet().iterator();
    while(entryIter.hasNext()){
        Map.Entry<String,Object> entry = entryIter.next();
        System.out.println(entry.getKey() + "=" + entry.getValue());
    }
        System.out.println(list2.get(i));
    }

###Map转换成xml###

XmlMapper

String mapStrrin = xmlMapper.writeValueAsString(map);
//或
xmlMapper.writeValue(System.out, map);

ToXmlGenerator

xmlGenerator.writeObject(map);

<HashMap xmlns=""><A><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></A><B><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></B></HashMap>

###xml转换成Map###

String xmlMap = "<HashMap xmlns=\"\"><A><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></A><B><id>1</id><name>hoojo</name><email>hoojo_@126.com</email><address>china-Guangzhou</address><birthday/></B></HashMap>";

第一种:解析成String-POJO

JavaType javaType = xmlMapper.getTypeFactory().constructMapType(Map.class, String.class, AccountBean.class);
Map<String, AccountBean> maps = xmlMapper.readValue(xmlMap, javaType);

Iterator<Map.Entry<String,AccountBean>> entryIter = maps.entrySet().iterator();
while(entryIter.hasNext()){
    Map.Entry<String,AccountBean> entry = entryIter.next();
    System.out.println(entry.getKey() + "==" + entry.getValue());
}

第二种:解析成String-LinkedHashMap<String,String>

Map<String, LinkedHashMap<String,String>> map = xmlMapper.readValue(xmlMap, Map.class);

System.out.println(map);

Iterator<Map.Entry<String,LinkedHashMap<String,String>>> entryIterator = map.entrySet().iterator();
while(entryIter.hasNext()){
    Map.Entry<String,LinkedHashMap<String,String>> entrys = entryIterator.next();
    System.out.println(entrys.getKey() + "=");

    LinkedHashMap<String,String> entryMap = entrys.getValue();
    Iterator<Map.Entry<String,String>> iter = entryMap.entrySet().iterator();
    while(iter.hasNext()){
        Map.Entry<String,String> entry = iter.next();
        System.out.println(entry.getKey() + "=" + entry.getValue());
    }
}

###复杂的xml输出###

    XmlMapper xmlMapper = new XmlMapper();
    ToXmlGenerator xmlGenerator = xmlMapper.getFactory().createGenerator(System.out, JsonEncoding.UTF8);

    QName root = new QName("catalog");
    xmlGenerator.setNextName(root);//<catalog>

    xmlGenerator.writeStartObject();

    QName book = new QName("book");

    xmlGenerator.startWrappedValue(book, root);//<book>

    xmlGenerator.setNextIsAttribute(true);
    xmlGenerator.writeFieldName("id");
    xmlGenerator.writeString("bk101");

    xmlGenerator.setNextIsAttribute(false);
    xmlGenerator.writeFieldName("title");
    xmlGenerator.writeString("the title");

    xmlGenerator.setNextIsAttribute(false);
    xmlGenerator.writeFieldName("price");
    xmlGenerator.writeNumber(44.95);;

    xmlGenerator.finishWrappedValue(book, root);//</book>

    xmlGenerator.startWrappedValue(book, root);//<book>

    xmlGenerator.setNextIsAttribute(true);
    xmlGenerator.writeFieldName("id");
    xmlGenerator.writeString("bk102");

    xmlGenerator.setNextIsAttribute(false);
    xmlGenerator.writeFieldName("title2");
    xmlGenerator.writeString("the title2");

    xmlGenerator.setNextIsAttribute(false);
    xmlGenerator.writeFieldName("price2");
    xmlGenerator.writeNumber(22.95);;

    xmlGenerator.finishWrappedValue(book, root);//</book>

    xmlGenerator.writeEndObject();//</catalog>
    xmlGenerator.flush();
    xmlGenerator.close();

    输出:(id前的zdef-863096486:暂时不知道怎么解决)
    <catalog xmlns="">
        <book zdef-863096486:id="bk101">
            <title>the title</title>
            <price>44.95</price>
        </book>
        <book zdef737113102:id="bk102">
            <title2>the title2</title2>
            <price2>22.95</price2>
        </book>
    </catalog>

###其他###

参考:http://blog.csdn.net/laixiaonian/article/details/8144920

© 著作权归作者所有

共有 人打赏支持
CrazyManDF
粉丝 3
博文 80
码字总数 32127
作品 0
程序员
私信 提问
后台数据传输-JSON

image.png 工作中经常要用到Json、JavaBean、Xml之间的相互转换,用到了很多种方式,这里做下总结,以供参考。现在主流的转换工具有Json-lib、Jackson、Fastjson、Gson等,我为大家一一做简单...

东东2866
2017/11/16
0
0
Jackson 框架,轻易转换JSON

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21...

ibm_hoojo
2011/04/22
0
0
继Struts2漏洞,Jackson漏洞来袭

前两天休息,偏偏此时出现漏洞了,心里咯噔一下,发表一下希望关注的博友可以重视下。 1、时间: 2017-4-17 2、漏洞: Jackson框架Java反序列化远程代码执行漏洞,Jackson可以轻松的将Java对...

任志远Ray
2017/04/20
0
0
Jackson 高性能的JSON处理 android/移动开发必备jackson

今天自行研究了下json ,感觉非常好用,经过测试比google的GSON快多了 同时Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。功能非常的强悍! ...

迷途d书童
2012/03/26
1K
0
XML 和 Java 技术JiBX 体系结构

文章转载出处:http://www.cnblogs.com/hoojo/archive/2011/04/27/2030205.html Jibx 处理XML 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2......

17099933344
2017/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 看来我只适合当一个千斤顶

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《我想我是伟大的》 《我想我是伟大的》- 九天 手机党少年们想听歌,请使劲儿戳(这里) 最近面试的好多呀, 面试了一个漂...

小小编辑
26分钟前
263
9
grafana安装使用及与zabbix集成

grafana简介 Grafana是一个完全开源的度量分析与可视化平台,可对来自各种各种数据源的数据进行查询、分析、可视化处理以及配置告警。 Grafana支持的数据源: 官方:Graphite,InfluxDB,Ope...

阿dai学长
58分钟前
12
0
带你看数据挖掘与机器学习-厦大EDP上课出勤预测

带你看数据挖掘与机器学习-厦大EDP上课出勤预测 标签: 数据挖掘 特征工程 机器学习 出勤预测 write by xmhexi 2019/3/22 内容提要 首先说明本文是一篇科普文章,通过一个实际案例,帮助理解什...

xmhexi
今天
134
0
IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
今天
5
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部