专栏首页代码人生xml解析系列(二)——用Marshaller和Unmarshaller解析xml

xml解析系列(二)——用Marshaller和Unmarshaller解析xml

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/74518580

常用标签

这是jdk1.6中自带的xml解析器,它可以通过配置的方式,将java对象和xml的节点映射起来,形成java对象和xml的方便的转换。

常用注解

@XmlRootElement 作用于类,表示该类与xml的主节点映射,

常用参数

name : 主节点标签名,默认与类名首字母小写一致。

@XmlElement 作用于属性的getset方法,表示该属性与节点对应,属性可以是List,也可以是普通Object。

常用参数

name : 映射的节点标签名

@XmlElement(name = "channel")
public List<Channel> getChannel() {
    return channel;
}

@XmlAccessorType 作用于类,将类属性和对于xml节点自动映射,和@XmlElement一起使用会发生冲突

XmlElementWrapper 还是类的两个属性具有相同名称 "XXX"

@XmlAttribute 作用于属性的get|set方法,表示类属性与xml该节点的属性对应

常用参数

name : 属性名

@XmlElementWrapper 作用于属性或其get|set方法,使javabean转xml会自动加上一个包装的标签,

<BODY>
   <ANQI>00001</ANQI>
   <ANQI>00002</ANQI>
   <ANQI>00003</ANQI>
</BODY>
@XmlElementWrapper(name=”BODY”)
@XmlElement(name = "ANQI")
public String getAnqi()
{
   return anqi;
}

@XmlValue 标签的text

XML和javabean相互转换

public static <T> T xmlToBean(String xml, T t) throws JAXBException{
    JAXBContext context = JAXBContext.newInstance(t.getClass());
    Unmarshaller um =context.createUnmarshaller();
    StringReader sr = new StringReader(xml);
    t = (T)um.unmarshal(sr);
    return t;
}
public static String objectToXML(Class clazz, Objectobject)
        throws JAXBException
{
    String xml = null;
    JAXBContext context = JAXBContext.newInstance(clazz);
    Marshaller m =context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    Writer w = new StringWriter();
    m.marshal(object, w);
    xml = w.toString();
    return xml;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入剖析来自未来的缓存-Caffeine

    读这篇文章之前希望你能好好的阅读: 你应该知道的缓存进化史 和 如何优雅的使用缓存? 。这两篇文章主要从一些实战上面去介绍如何去使用缓存。在这两篇文章中我都比较...

    用户5397975
  • 咱们从头到尾说一次 Java 垃圾回收

    之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。?

    用户5397975
  • 浅析如何设计一个亿级网关

    API网关可以看做系统与外界联通的入口,我们可以在网关进行处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等。

    用户5397975
  • 揭秘Java高效随机数生成器

    在Java中一提到随机数,很多人就会想到Random类,如果有生成随机数的需求的时候,大多数时候都会选择使用Random来进行随机数生成,虽然其内部使用CAS来...

    用户5397975
  • 谈谈引用和Threadlocal的那些事

    某一天在某一个群里面的某个群友突然提出了一个问题:"threadlocal的key是弱引用,那么在threadlocal.get()的时候,发生GC之后,key...

    用户5397975
  • Java并发计数器探秘

    一提到线程安全的并发计数器,AtomicLong 必然是第一个被联想到的工具。Atomic* 一系列的原子类以及它们背后的 CAS 无锁算法,常常是高性能,高并...

    用户5397975
  • 一文探讨堆外内存的监控与回收

    记得那是一个风和日丽的周末,太阳红彤彤,花儿五颜六色,96 年的普哥微信找到我,描述了一个诡异的线上问题:线上程序使用了 NIO FileChannel 的 堆...

    用户5397975
  • 一直使用AtomicInteger?试一试FiledUpdater

    在进入正题之前,这里先提出一个问题,如何在多线程中去对一个数字进行+1操作?这个问题非常简单,哪怕是Java的初学者都能回答上来,使用AtomicXXX,比如有...

    用户5397975
  • 文件IO操作的最佳实践

    已经过去的中间件性能挑战赛,和正在进行中的 第一届 PolarDB 数据性能大赛 都涉及到了文件操作,合理地设计架构以及正确地压榨机器的读写性能成了比赛中获取较...

    用户5397975
  • 设计的五大原则-SOLID

    最近在读《架构整洁之道》这一本书,这本书的确写得不错,最近也没有更新文章,一方面再忙工作,另一方面也再啃一些书。当然文章还是得更新,《架构整洁之道》里面有些有意...

    用户5397975

扫码关注云+社区

领取腾讯云代金券