记得之前遇到过需要将实体转成xml,然后调用webservice接口的情景。比较了几种方式,发现使用jdk本身自带的JAXBContext转换比较方便,直接通过注解来标识各个字段在xml中的属性及节点。下面直接上干货。

import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;/*** 2016-05-12* @author yibeiqingfeng* Javabean 转 xml*/
public class XmlUtil {public static String beanToXml(Object obj, java.lang.Class<?> load)throws JAXBException {JAXBContext context = JAXBContext.newInstance(load);Marshaller marshaller = context.createMarshaller();//格式化输出xmlmarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//设置输出xml编码格式marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);//去掉standalone属性return writer.toString().replace("standalone=\"yes\"", "");}}
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;@XmlRootElement(name="student")
@XmlType(propOrder={"name","age","_class","specialitys"})
public class Student {private String name;private String age;private Class _class;private List<String> specialitys;@XmlAttribute(name="name")public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlAttribute(name="age")public String getAge() {return age;}public void setAge(String age) {this.age = age;}@XmlElement(name="class")public Class get_class() {return _class;}public void set_class(Class _class) {this._class = _class;}@XmlElementWrapper(name = "specialitys")@XmlElement(name = "speciality")public List<String> getSpecialitys() {return specialitys;}public void setSpecialitys(List<String> specialitys) {this.specialitys = specialitys;}
}


import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;public class Class {private String grade;private String value;@XmlAttribute(name="grade")public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}@XmlValuepublic String getValue() {return value;}public void setValue(String value) {this.value = value;}}

测试程序:
import java.util.ArrayList;
import java.util.List;import javax.xml.bind.JAXBException;/*** 2018-01-06* @author yibenqingfeng* test*/
public class TestRun {public static void main(String[] args) {Student student = new Student();com.student.Class _class = new Class();student.setAge("13");student.setName("yibeiqingfeng");List<String> specialitys = new ArrayList<String>();specialitys.add("足球");specialitys.add("篮球");student.setSpecialitys(specialitys);_class.setGrade("primary");_class.setValue("2");student.set_class(_class);try {System.out.println(XmlUtil.beanToXml(student,Student.class));} catch (JAXBException e) {e.printStackTrace();}}}


这个例子基本包含了xml的所有节点情况,可以按部就班的使用。讲解一下此文中用到的注解。

@XmlRootElement 声明xml的根节点。

@XmlType 使用propOrder指定xml的节点顺序,同时可以指定namespace。

@XmlElement 声明此字段是xml中的节点字段,以及name属性

@XmlAttribute 声明此字段是xml中的属性值

@XmlValue 声明这是xml中带属性节点的值,例如 <class grade="primary">2</class> 这种节点

@XmlElementWrapper 字面意思就是xml节点包装。如果没有此注解的话,我们有很多不便。得写很

的实体来满足xml格式。



有不对的地方还请大家多多指教!

												

实体转xml(史上最全面)相关推荐

  1. sketch android xml,史上最详细Sketch Measure讲解

    安装下载安装包 双击Sketch Measure.sketchplugin完成安装 工具栏 一个集成了所有功能图标的工具栏,可以方便操作每一个功能 执行 Plugin > Sketch Meas ...

  2. android 改python,如何正确的用python修改AndroidManifest.xml(史上最详细教程)

    写在前面的话 AndroidManifest.xml这个文件如果你搞过android相关的东西(如果没搞过,我希望你去搞一下), 你一定很熟悉. 我们在工作可能会有一些动态修改或者获取manifest ...

  3. 史上最最靠谱,又双叒叒(ruò,zhuó)简单的基于MSXML的XML解析指南-C++

    文章目录 史上最最靠谱,又双叒叒简单的基于MSXML的XML解析指南-C++ 流程设计 xml信息有哪几种读取形式(xml文件或wchar) 如何选取节点,and取节点属性有哪些方法? IXMLDOM ...

  4. 苹果几是双卡双待_苹果史上首款实体双卡双待小屏iPhone诞生,值得入手吗?

    如果一说到实体双卡双待iPhone手机,大家第一印象估计是iPhone XR和iPhone XS max吧!现在小编要告诉你的是,就在今天凌晨,史上最小屏幕尺寸的实体双卡双待iPhone 诞生了.没错 ...

  5. 史上最大实体关系抽取数据集

    史上最大实体关系抽取数据集 | 清华发布 2019-03-23 08:00 本文转载自微信公众号:AI科技评论 AI 科技评论按,在去年的 EMNLP2018 上,由孙茂松教授领导的清华大学自然语言处 ...

  6. 史上最快AI计算机发布!谷歌TPU V3的1/5功耗、1/30体积,首台实体机已交付

    大数据文摘 昨天 大数据文摘作品 还记得8月份占据各家科技头条的有史以来最大芯片吗? 这个名为Cerebras Wafer Scale Engine(WSE)的"巨无霸"面积达到4 ...

  7. 2016年GitHub上史上最全的Android开源项目分类汇总

    以下内容为转载 版主原网址 http://itindex.net/detail/51896-github-android-开源 GitHub上史上最全的Android开源项目分类汇总 今天在看博客的时 ...

  8. 史上最全阿里 Java 面试题总结及答案

    史上最全阿里 Java 面试题总结及答案 qq_35151346 于 2019-08-06 13:26:53 发布 33740 收藏 817 分类专栏: 面试题 文章标签: 阿里巴巴 面试题 答案 j ...

  9. 史上最全的iOS面试题及答案

    史上最全的iOS面试题及答案 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encodin ...

最新文章

  1. C语言如何实现随机打印24个母,菜鸟求助,写一个随机输出26个英文字母的程序...
  2. BIEE物理业务层编辑之后发布路径
  3. 如何安排vixta之三-Installing来源劈脸安排
  4. linux03-用户与组
  5. 从零开始学习jQuery (六) AJAX快餐
  6. 高手请进关于RAID和热备
  7. Cocoapods的安装和使用
  8. keil_4/MDK各种数据类型占用的字节数
  9. 网络安全工程师必备浏览器插件
  10. Node.js及Express的下载、安装和配置教程
  11. 时间序列信号处理系列-基于Python的同步压缩变换
  12. android手机不开机刷机,手机无法开机怎么刷机?安卓手机救砖教程
  13. 颓废了很久了,需要振作了
  14. clickhouse建表语句行数太多导致报错 Unmatched parentheses: (
  15. js计算日期差;js计算天数差
  16. 【skills】sublime text 3 自定义 修改 颜色主题 配色方案
  17. [转帖]经营之神杰克韦尔奇的8个领导守则
  18. java 调用matlab rank_科学网—Matlab: X is rank deficient - 李旭的博文
  19. 计算机相关单词 1000+
  20. Java主流技术、优秀工具、优秀书籍和优秀网站大罗列

热门文章

  1. missing Change-Id in message footer
  2. 欧几里得、扩展的欧几里得算法
  3. 从欧几里得到拓展欧几里得
  4. 语音识别 - ASR whisper
  5. 哈夫曼编码的简单实例
  6. 【neutron】OpenStack Neutron -- 学习资料
  7. SQL 注释语句 (--与/*...*/)
  8. Python数据类型及操作
  9. 初中语文古诗词作者生平归纳
  10. 天威TM1668芯片官方资料,讲解,代码,自己写的例程