XML解析神器JAXB

阅读引导

1、xml配置文件的读取使用,不要再用dom4j、dom、SAX等老掉牙的实现了。

2、OXM框架实现:JAXB——Java architecture for xml binding,spring等都有支持实现。

3、为自己工作,为自己的系统工作,做自己的老板,形成正循环:打磨当前工作的核心关键能力——>高效能工作——>更多时间打磨自己的系统——>更高效能工作——>打磨下个层次工作的核心关键能力……

4、核心竞争力,是指你拥有的(独特的)知识经验组合,经过你思维逻辑的组织梳理,在实践中产生无可替代的价值。打造自己的TMS系统(T:专业技术;M:沟通管理、S:行业解决方案),利用复利效应,让系统为自己工作。

由于XML规范,其可读性强、结构化展示,是目前近乎所有应用开发中都要使用的协议,尤其是一些配置文件。

例如spring的bean的xml配置声明、logback的日志配置文件logback.xml等。

而很多时候,在开发过程中,一些固定配置也会放到xml中(另外一些会放到properties文件中,另外一篇论述)。

问题是:很多人一看到xml文件,就上网搜索xml解析方法,然后搜索出来很多dom4j、SAX解析器的使用、比较。

1 概念迁移 : 从ORM 到OXM

做应用开发的,应该都熟悉ORM规范(对象关系映射),或者常用的框架Mybatis、Hibernate等,用来将Java对象和关系型数据库的数据进行映射。

ORM框架将原本开发人员需要手工写的内容全部封装。

同样的,有没有类似框架?使得我们不需要再去关注xml的结构、节点等解析?

有。

OXM的概念,就是指对象与xml映射。我们忽略映射(xml解析过程),直接使用映射后的Java对象。

或者说,对于xml的序列化以及反序列化。

而OXM框架实现,比较推荐的就是:spring的JAXB

2 Spring 的 JAXB实现

JAXB,Java architecture for xml binding,使得开发人员不需要关心xml的解析过程,只关注XML元素与Java属性的映射关系即可。

spring配置,指定使用OXM的JAXB实现

<oxm:jaxb2-marshaller id="marshaller"><oxm:class-to-be-bound name="com.sz.jaxb.RequestMsg"/>
</oxm:jaxb2-marshaller>

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<RequestMsg id="jaxb"><precondition><name>dev</name><age>29</age><children><child>1</child><child>2</child></children></precondition><precondition><name>manager</name><age>26</age><children><child>3</child><child>4</child></children></precondition>
</RequestMsg>

Java对象添加注解,注解的使用方法,请自行搜索

从xml中可以看到,这是一个多层嵌套的结构化数据,如果我们想要使用上面xml配置文件中的数据,直接声明下面的Java就好了

@XmlRootElement(name="RequestMsg")
@XmlAccessorType(XmlAccessType.FIELD)
public class RequestMsg {@XmlElement(name="precondition")private List<Procondition> preconditions;@Overridepublic String toString() {return "RequestMsg [preconditions=" + preconditions + "]";}
}
@XmlRootElement(name="precondition")
@XmlAccessorType(XmlAccessType.FIELD)
public class Procondition {@XmlElement(name="name")private String name;@XmlElement(name="age")private int age;@XmlElementWrapper(name="children")@XmlElement(name="child")private List<String> children;//省略getter\setter方法}

使用(以xml转Java对象为例子)

    @Testpublic void testJaxbXmlToJava() throws XmlMappingException, IOException {String xmlPath = "D:\\workspace\\tryWs\\JAXB\\src\\main\\resources\\test.xml";File xml = new File(xmlPath);Source source = new StreamSource(xml);Unmarshaller unmarshaller = (Unmarshaller) ctx.getBean("marshaller");RequestMsg msg = (RequestMsg) unmarshaller.unmarshal(source);System.out.println(msg.toString());}

3 OXM其它实现

Spring中,还有其它的OXM实现,例如CastorJiBXXStream等。

另外,常用的properties文件,是否有更好的加载处理方式呢?是否也必须手工写文件读取方法?

XML解析神器JAXB相关推荐

  1. java xml解析器_Java XML解析器

    java xml解析器 Java XML parser is used to work with xml data. XML is widely used technology to transpor ...

  2. 复杂xml解析(JAXB)

    复杂xml解析-JAXB 一. 背景 二. 使用 1. 注解使用 @XmlRootElement @XmlElement @XmlAttribute @XmlTransient @XmlAccesso ...

  3. Spring OXM- 漫谈XML解析技术

    概述 XML解析技术漫谈 认识XML XMl的处理技术 概述 我们先从XML各种解析技术的发展历程谈起,并介绍一些主流 O/X Mapping组件的使用方法,比如XStream.Castor.JiBX ...

  4. XML解析的四种方式

    1.说明 XML是EXtensible Markup Language, 即可扩展标记语言, 是一种通用的数据交换格式, 它的平台无关性.语言无关性.系统无关性, 给数据集成与交互带来了极大的方便. ...

  5. 常用 XML 解析技术

    现在的软件项目都不是独立的一个项目,都是多系统协调工作.这样的话就涉及到系统间的通讯,通讯就会跟报文传输挂上关系.系统间使用怎样的报文格式进行通讯呢?有的使用固定长度格式报文:有的使用变长格式报文:有 ...

  6. java xml开源操作类,xml解析和操作的开源工具项目涵盖java c++ php 等语言

    XML解析器-Xerces    XML操作库-dom4j    XML文档解析器-Digester    J2ME-的XML-解析器-kXML XML解析类库-MXP1    XML解析器-LibX ...

  7. 硬核来袭!!!一篇文章教你入门Python爬虫网页解析神器——BeautifulSoup详细讲解

    文章目录 一.BeautifulSoup介绍 二.安装 三.bs4数据解析的原理 四.bs4 常用的方法和属性 1.BeautifulSoup构建 1.1 通过字符串构建 1.2 从文件加载 2.Be ...

  8. xml解析之stax

    博文引自:http://zangweiren.iteye.com/blog/647334 Java 6.0对XML支持的新特性有许多方面.比如StAX.针对XML-Web服务的Java架构(JAX-W ...

  9. XML解析---DOM解析和SAX解析

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. 对于XML的解析,还有 ...

最新文章

  1. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克
  2. 关于枚举概念的理解以及存在意义
  3. R语言-决策树-party包
  4. ITK:向量值图像像素的变换幅度
  5. linux指向域同步时间,linux在局域网下设置时间同步
  6. Android官方开发文档Training系列课程中文版:手势处理之记录手指移动的轨迹
  7. C 多态和java多态_C与java的多态机制与区别
  8. cocos中如何让背景模糊_cocos2dx-js Shader的使用(高斯模糊)
  9. dubbo与zookeeper
  10. VAD(Voice Activity Detection)算法详解
  11. 台风怎么看内存颗粒_内存应该怎么选?看完你就知道了。影驰 星曜 DDR4-3000 8G 内存测评(RGB真的强)...
  12. 逆水寒ol服务器维修,逆水寒OL:官方再开多个服务器玩家关心的问题却是一个字_...
  13. jclasslib 查看类信息
  14. java阴历阳历_Java 阴历阳历转换
  15. PHP pdf转化为图片(PNG)
  16. Cherno C++ P61 C++的命名空间
  17. 运用jQuery实现一个简易轮播图
  18. 二叉树的左视图-java
  19. js中元素样式设置的六种方法
  20. 1375. 至少K个不同字符的子串

热门文章

  1. OpenFec 基本使用
  2. 第四部分:Vue高级应用
  3. deepstream编译gst-plugins下的gst-dsexample插件出现找不到opencv4和gstbasetransform.h: No such file or directory
  4. 乔利斯基三角分解_解线性方程组的直接法4.1-2.ppt
  5. sapmto生产模式配置及操作详解_025 SAP FICO 后台配置及前台操作-MTO按订单生产20170122.docx...
  6. Unity3D基础案例-见缝插针
  7. android inputmethodmanager内存泄露,InputMethodManager内存泄露现象及解决
  8. 三篇强化学习用于多智能体路径规划的论文
  9. oracle oui gi是什么,【翻译自mos文章】在windows 2012上安装rac时,GI 的安装失败,报OUI-35024...
  10. 为什么说“分布式架构”才是AR眼镜的未来