JAXB教程–入门

注意:请查看我们的Java XML绑定JAXB教程– ULTIMATE指南

什么是JAXB?

JAXB代表用于XML绑定的Java体系结构。它用于将XML转换为java对象,并将java对象转换为XML。JAXB定义了一个用于在XML文档中读写Java对象的API。与SAX和DOM不同,我们不需要了解XML解析技术。


您可以使用JAXB执行两种操作

  1. 编组 :将Java对象转换为XML
  2. 编组 :将XML转换为Java对象

JAXB教程

我们将创建一个封送和封送的Java程序。

对于编组:

对于解组:

Java程序:

借助JAXB提供的注释和API,将Java对象转换为XML(反之亦然)变得非常容易。

1.国家/地区

一个Java对象,用于在XML之间进行转换

在src-> org.arpit.javapostsforlearning.jaxb中创建Country.java

package org.arpit.javapostsforlearning.jaxb;import java.util.ArrayList;import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;//Below annotation defines root element of XML file
@XmlRootElement
//You can define order in which elements will be created in XML file
//Optional
@XmlType(propOrder = { 'countryName', 'countryPopulation', 'listOfStates'})
public class Country {private String countryName;private double countryPopulation;private ArrayList<state> listOfStates;public Country() {}public String getCountryName() {return countryName;}@XmlElementpublic void setCountryName(String countryName) {this.countryName = countryName;}public double getCountryPopulation() {return countryPopulation;}@XmlElementpublic void setCountryPopulation(double countryPopulation) {this.countryPopulation = countryPopulation;}public ArrayList<state> getListOfStates() {return listOfStates;}// XmLElementWrapper generates a wrapper element around XML representation@XmlElementWrapper(name = 'stateList')// XmlElement sets the name of the entities in collection@XmlElement(name = 'state')public void setListOfStates(ArrayList<state> listOfStates) {this.listOfStates = listOfStates;}}

@XmlRootElement:此批注定义XML文件的根元素。
@XmlType(propOrder = {'属性列表顺序'}) :用于定义XML文件中元素的顺序。这是可选的。
@XmlElement:用于定义XML文件中的元素,它设置实体名称。 @XmlElementWrapper(name ='要赋予该包装器的名称'):它围绕XML表示形式生成一个包装器元素。例如,在上面的示例中,它将生成<stateList> 每个<state>元素周围

2.状态库

package org.arpit.javapostsforlearning.jaxb;import javax.xml.bind.annotation.XmlRootElement;//Below statement means that class 'Country.java' is the root-element of our example
@XmlRootElement(namespace = 'org.arpit.javapostsforlearning.jaxb.Country')
public class State {private String stateName;long statePopulation;public State(){}public State(String stateName, long statePopulation) {super();this.stateName = stateName;this.statePopulation = statePopulation;}public String getStateName() {return stateName;}public void setStateName(String stateName) {this.stateName = stateName;}public long getStatePopulation() {return statePopulation;}public void setStatePopulation(long statePopulation) {this.statePopulation = statePopulation;}
}

3.JAXBJavaToXml.java

package org.arpit.javapostsforlearning.jaxb;import java.io.File;
import java.util.ArrayList;import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;public class JAXBJavaToXml {public static void main(String[] args) {// creating country objectCountry countryIndia=new Country();  countryIndia.setCountryName('India');countryIndia.setCountryPopulation(5000000);// Creating listOfStatesArrayList<state> stateList=new ArrayList<state>();State mpState=new State('Madhya Pradesh',1000000);stateList.add(mpState);State maharastraState=new State('Maharastra',2000000);stateList.add(maharastraState);countryIndia.setListOfStates(stateList);try {// create JAXB context and initializing MarshallerJAXBContext jaxbContext = JAXBContext.newInstance(Country.class);Marshaller jaxbMarshaller = jaxbContext.createMarshaller();// for getting nice formatted outputjaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);//specify the location and name of xml file to be createdFile XMLfile = new File('C:\\arpit\\CountryRecord.xml');// Writing to XML filejaxbMarshaller.marshal(countryIndia, XMLfile); // Writing to consolejaxbMarshaller.marshal(countryIndia, System.out); } catch (JAXBException e) {// some exception occurede.printStackTrace();}}
}

运行以上程序后,将得到以下输出

控制台输出:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<country xmlns:ns2='org.arpit.javapostsforlearning.jaxb.Country'><countryName>India</countryName><countryPopulation>5000000.0</countryPopulation><stateList><state><stateName>Madhya Pradesh</stateName><statePopulation>1000000</statePopulation></state><state><stateName>Maharastra</stateName><statePopulation>2000000</statePopulation></state></stateList>
</country>

现在,我们将阅读上面生成的XML并从中获取国家对象。

4.JAXBXMLToJava.java

package org.arpit.javapostsforlearning.jaxb;import java.io.File;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;public class JAXBXMLToJava {public static void main(String[] args) {try {// create JAXB context and initializing MarshallerJAXBContext jaxbContext = JAXBContext.newInstance(Country.class);Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();// specify the location and name of xml file to be readFile XMLfile = new File('C:\\arpit\\CountryRecord.xml');// this will create Java object - country from the XML fileCountry countryIndia = (Country) jaxbUnmarshaller.unmarshal(XMLfile);System.out.println('Country Name: '+countryIndia.getCountryName());System.out.println('Country Population: '+countryIndia.getCountryPopulation());ArrayList<state> listOfStates=countryIndia.getListOfStates();int i=0; for(State state:listOfStates){i++;System.out.println('State:'+i+' '+state.getStateName());}} catch (JAXBException e) {// some exception occurede.printStackTrace();}}
}

运行以上程序后,将得到以下输出:

控制台输出:

Country Name: India
Country Population: 5000000.0
State:1 Madhya Pradesh
State:2 Maharastra

JAXB的优点:

  • 它比DOM或SAX解析器简单易用
  • 我们可以将XML文件编组到其他数据目标,例如inputStream,URL,DOM节点。
  • 我们可以从其他数据目标中解组XML文件。
  • 我们不需要了解XML解析技术。
  • 我们不需要总是访问树结构中的XML。

JAXB的缺点:

  • JAXB是高层API,因此与SAX或DOM相比,它对解析的控制更少。
  • 它有一些开销的任务,因此它比SAX慢。

源代码:

下载

参考: JAXB教程–从我们的JCG合作伙伴 Arpit Mandliya 入门 , 了解有关初学者博客的Java框架和设计模式 。

翻译自: https://www.javacodegeeks.com/2013/02/jaxb-tutorial-getting-started.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Kubernetes权威指南第2版》学习(二)一个简单的例子

1&#xff1a; 安装VirtualBox, 并下载CentOS-7-x86_64-DVD-1708.iso&#xff0c; 安装centOS7,具体过程可以百度。 2&#xff1a;开启centOS的SSH&#xff0c; 步骤如下&#xff1a; &#xff08;1&#xff09; yum list installed | grep openssh-server查看是否已经安装了SS…

create_volume.go

package apiimport ("net/http""io/ioutil""errors""fmt")//创建存储空间func CreateVolume(host string, port int, vid uint64) error {url : fmt.Sprintf("http://%s:%d/%d/", host, port, vid)resp, err : http.Post(ur…

linux 安装ftp下载,LINUX FTP安装与配置

转载了一篇配置vsftpd服务器的文章&#xff0c;经过自己的配置&#xff0c;终于搞定了&#xff01;1.安装vsftpdXml代码 yum install vsftpd2.启动/重启/关闭vsftpd服务器Xml代码 [rootlocalhost ftp]# /sbin/service vsftpd restartShutting down vsftpd: [ OK ]Starting vs…

使用Hibernate批量获取

如果需要从Java处理大型数据库结果集&#xff0c;则可以选择JDBC&#xff0c;以提供所需的低级控制。 另一方面&#xff0c;如果您已在应用程序中使用ORM&#xff0c;则回退到JDBC可能意味着额外的麻烦。 在域模型中导航时&#xff0c;您将失去乐观锁定&#xff0c;缓存&#x…

c语言 static的用法

static在c里面可以用来修饰变量&#xff0c;也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不是堆&#xff0c;不要弄混。int a ;int main(){ int b ; int c* (int *)malloc(sizeof(int));}a是…

前端经典面试题 不经典不要star!

前言 (以下内容为一个朋友所述)今天我想跟大家分享几个前端经典的面试题,为什么我突然想写这么一篇文章呢?今天我应公司要求去面试了下几位招聘者,然后又现场整不出几个难题,就搜了一下前端变态面试题! HAHA&#xff0c;前提我并不是一个变态,欺负人的面试官.只是我希望看看对…

CSS的常见问题

1.css的编码风格 多行式&#xff1a;可读性越强&#xff0c;但是CSS文件的行数过多&#xff0c;影响开发速度&#xff0c;增大CSS文件的大小 一行式&#xff1a;可读性稍差&#xff0c;有效减少CSS文件的行数&#xff0c;有利于提高开发速度&#xff0c;减小CSS文件的大小 2.id…

linux 磁盘科隆,Linux中ln命令用法详解(硬链接)

硬连接指向的是节点(inode),是已存在文件的另一个名字,修改其中一个,与其连接的文件同时被修改;对硬链接文件进行读写和删除操作时候&#xff0c;效果和符号链接相同。但如果我们删除硬链接文件的源文件&#xff0c;硬链接文件仍然存在&#xff0c;而且保留了原有的内容。这时&…

Web前端开发学习误区,你掉进去了没?

从接触网站开发以来到现在&#xff0c;已经有五个年头了吧&#xff0c;今天偶然整理电脑资料看到当时为参加系里面一个比赛而做的第一个网站时&#xff0c;勾起了在这网站开发道路上的一串串回忆&#xff0c;成功与喜悦、烦恼与纠结都历历在目&#xff0c;感慨颇多。 先从大家学…

Oracle Database 11g DBA手册pdf

下载地址&#xff1a;网盘下载内容简介编辑《Oracle Database 11g DBA手册》所提供的专业知识可以帮助读者管理灵活的、高可用性的Oracle数据库。《Oracle Database 11g DBA手册》对上一版本进行了全面的修订&#xff0c;涵盖了每个新特性和实用工具&#xff0c;展示了如何实施…

link-cut-tree 简单介绍

目录 概念辨析辅助树轻边和重边操作介绍accessmake_rootfind_rootsplitlinkcut细节问题代码前言:这个算法似乎机房全都会,就我不会了TAT...强行搞了很久,勉强照着别人代码抄了一遍qwq 这个本人看论文实在看不懂,太菜了啊!!! 只好直接看如何实现...可是实现也看不太懂... 但直到…

linux svn 看不到文件,SVN更新时不能打开新文件svn-base系统找不到指定的文件

svn服务器架设在linux系统上&#xff0c;svn客户端在windows上&#xff0c;在update的时候可能会出现“Can’t open file.XXXX/tmp/text-base/XX.svn-base 系统找不到指定的文件”的错误。这是由于Linux服务器上的目标文件中存在两个相同文件名的文件。因为linux系统的文件名区…

C++primer 13.2.1节练习

练习13.23 1 #include <iostream>2 #include <string>3 #include <memory>4 5 using namespace std;6 7 8 class HasPtr {9 friend ostream &print(ostream &os, HasPtr &h); 10 public: 11 HasPtr(const string &s string()) : ps…

编年史与微云

总览 我面临的一个常见问题是&#xff1a; 如果是单个作者&#xff0c;多个读者&#xff0c;您如何扩展基于Chronicle的系统。 尽管有解决此问题的方法&#xff0c;但很有可能根本不会出现问题。 微云 这是我用来描述单个线程来完成当前由多个服务器完成的工作的术语。 &#…

去除IE10自带的清除按钮

最近在工作中碰到了一个问题&#xff0c;原本在IE8&#xff0c;IE9下正常的input表单&#xff0c;在IE10下会出现清除按钮&#xff0c;即表单右侧会出现一个可以清除该表单内容的小叉。由于之前一直没有兼容过IE10&#xff0c;所以我专门搜了下原因。发现&#xff0c;该功能是微…

Linux/CentOS7install PackageError: Loaded plugins: fastestmirror

Centons7 其大概意思是fastestmirror不能使用&#xff0c;fastestmirror是yum的一个加速插件&#xff0c;具体我也没有仔细了解过&#xff0c;可能是系统不支持或者缺少组件导致的。 处理办法就是禁用这个插件&#xff0c;方法如下&#xff1a; [rootlocalhost ~]# vim /etc/yu…

不要仅仅依靠单元测试

当您构建一个复杂的系统时&#xff0c;仅仅测试组件是不够的。 这很关键&#xff0c;但还不够。 想象一下一家汽车厂生产并进口最高质量的零件&#xff0c;但组装好之后再也不会启动发动机了。 如果您的测试用例套件几乎不包含单元测试&#xff0c;则您将永远无法确保系统整体正…

spring mvc的工作原理

该文转载自&#xff1a;http://blog.csdn.net/u012191627/article/details/41943393 SpringMVC框架介绍 1) spring MVC属于SpringFrameWork的后续产品&#xff0c;已经融合在Spring Web Flow里面。 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的…

oracle快速插入大量数据

方法一&#xff1a;循环 declare -- Local variables here m integer; begin -- Test statements here--输出开始时间 dbms_output.put_line(start:||sysdate); m:0;--循环插入的数据量 for i in 1..4000 loop m:m1; --插入语句&#xff0c;其中admintest||m, 为admintest后面…

春天遇见Apache Hadoop

SpringSource 刚刚宣布了适用于Apache Hadoop的Spring的第一个GA版本 。 该项目的目的是简化基于Hadoop的应用程序的开发。 您可以下载该项目在这里 &#xff0c;并检查了Maven的文物在这里 。 Apache Hadoop的Spring诞生是为了解决Hadoop应用程序构建不良的问题&#xff0c;…