JAXB解析xml
废话不多说,直接上代码
核心类:
package com.jaxb; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat; import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller; public class JaxbReadXml { @SuppressWarnings("unchecked")
public static <T> T readString(Class<T> clazz, String context) throws JAXBException {
try {
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller u = jc.createUnmarshaller();
return (T) u.unmarshal(new File(context));
} catch (JAXBException e) {
// logger.trace(e);
throw e;
}
} @SuppressWarnings("unchecked")
public static <T> T readConfig(Class<T> clazz, String config, Object... arguments) throws IOException,
JAXBException {
InputStream is = null;
try {
if (arguments.length > 0) {
config = MessageFormat.format(config, arguments);
}
// logger.trace("read configFileName=" + config);
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller u = jc.createUnmarshaller();
is = new FileInputStream(config);
return (T) u.unmarshal(is);
} catch (IOException e) {
// logger.trace(config, e);
throw e;
} catch (JAXBException e) {
// logger.trace(config, e);
throw e;
} finally {
if (is != null) {
is.close();
}
}
} @SuppressWarnings("unchecked")
public static <T> T readConfigFromStream(Class<T> clazz, InputStream dataStream) throws JAXBException {
try {
JAXBContext jc = JAXBContext.newInstance(clazz);
Unmarshaller u = jc.createUnmarshaller();
return (T) u.unmarshal(dataStream);
} catch (JAXBException e) {
// logger.trace(e);
throw e;
}
} public static void main(String[] args) throws JAXBException {
TestOrgs testOrgs = JaxbReadXml.readString(TestOrgs.class, "test/test.xml");
System.out.println(testOrgs.getSize());
System.out.println(testOrgs.getBatchNumber());
System.out.println(testOrgs.getErrmsg());
for (TestOrg o : testOrgs) {
System.out.println(o.getOrgName());
}
}
}
成员类:
package com.jaxb; import java.util.ArrayList;
import java.util.List; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; @SuppressWarnings("serial")
@XmlRootElement(name = "orgs")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestOrgs extends ArrayList<TestOrg> { // 泛化, 聚合 @XmlAttribute(name = "size")
private int size;
@XmlAttribute(name = "batch_number")
private Long batchNumber;
@XmlAttribute(name = "errmsg")
private String errmsg; @XmlElement(name = "org")
public List<TestOrg> getOrgs() {
return this;
} public int getSize() {
return size;
} public void setSize(int size) {
this.size = size;
} public Long getBatchNumber() {
return batchNumber;
} public void setBatchNumber(Long batchNumber) {
this.batchNumber = batchNumber;
} public String getErrmsg() {
return errmsg;
} public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
} }
成员类2:
package com.jaxb; import java.util.Date; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement; /**
* <pre>
* If you annotate your Artifact class with the annotation:
* @XmlAccessorType(XmlAccessType.FIELD)
* then you do not need to annotate the fields with @XmlElement and the
* setter/getter methods will be ignored.
* </pre>
*
* @author User
*/
@XmlAccessorType(XmlAccessType.FIELD)
// 用了这个之后就会自动忽略setter/getter方法。不用这个就需要去掉注解,需要保证属性名和xml里的表签名一致
public class TestOrg {
@XmlElement(name = "org_id")
private Long orgId;
@XmlElement(name = "parent_id")
private Long parentId;
@XmlElement(name = "org_name")
private String orgName;
@XmlElement(name = "org_code")
private String orgCode;
@XmlElement(name = "org_type")
private String orgType;
@XmlElement(name = "start_d")
private Date startDate;
@XmlElement(name = "end_d")
private Date endDate;
@XmlElement(name = "attribute1")
private String attribute;
@XmlElement(name = "insert_t")
private Date insertTime; public Long getOrgId() {
return orgId;
} public void setOrgId(Long orgId) {
this.orgId = orgId;
} public Long getParentId() {
return parentId;
} public void setParentId(Long parentId) {
this.parentId = parentId;
} public String getOrgName() {
return orgName;
} public void setOrgName(String orgName) {
this.orgName = orgName;
} public String getOrgCode() {
return orgCode;
} public void setOrgCode(String orgCode) {
this.orgCode = orgCode;
} public String getOrgType() {
return orgType;
} public void setOrgType(String orgType) {
this.orgType = orgType;
} public Date getStartDate() {
return startDate;
} public void setStartDate(Date startDate) {
this.startDate = startDate;
} public Date getEndDate() {
return endDate;
} public void setEndDate(Date endDate) {
this.endDate = endDate;
} public String getAttribute() {
return attribute;
} public void setAttribute(String attribute) {
this.attribute = attribute;
} public Date getInsertTime() {
return insertTime;
} public void setInsertTime(Date insertTime) {
this.insertTime = insertTime;
} }
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<orgs size="7095" batch_number="20130704110039" errmsg="">
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.苏州沧浪区</org_name>
<org_code>512AAS</org_code>
<org_type>门店部门</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.苏州沧浪区</org_name>
<org_code>512AAS</org_code>
<org_type>门店部门</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.苏州沧浪区</org_name>
<org_code>512AAS</org_code>
<org_type>门店部门</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.苏州沧浪区</org_name>
<org_code>512AAS</org_code>
<org_type>门店部门</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.苏州沧浪区</org_name>
<org_code>512AAS</org_code>
<org_type>门店部门</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
</orgs>
JAXB解析xml的更多相关文章
- 使用JAXB解析xml文件(一)
1.java中解析xml的几种方式 1.1 JDK原生dom形式 原理:一次性把xml读入内存,在内存中构建成树形结构.优点:对节点操作方便,缺点:需要大量的内存空间,浪费资源 1.2 SAX形式 ...
- JAXB解析XML为对象
JAXB支持注解将XML转化为对象,具体看一个简单的例子: <?xml version="1.0" encoding="utf-8"?> <A ...
- jaxb解析xml工具类
[quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote] package com.nnk.flowrecharge.common;im ...
- Jaxb解析xml准换为javabean
先说下这个的背景吧,前些日子,有个以前的小同事说刚接触webservice,想解析下xml,记得我学的时候还是dom4j,sax的解析方式,最近看别人的代码用的jaxb的方式,觉得注解起来很简练,所以 ...
- 使用JAXB解析xml文件(二)
前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解 1.@XmlRootElement 用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccess ...
- JAXB解析xml 的注解说明
1.将 xml 文件中的各个节点和属性信息创建对应的Java模型 2.在Java模型中的创建与 xml 文件对应的节点和属性需要用注解来表示@XmlRootElement 将一个Java类映射 ...
- webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml
1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...
- java生成解析xml的另外两种方法Xstream
Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...
- java 中解析xml的技术
最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表 ...
随机推荐
- 菜鸟学SSH(一)——Struts实现简单登录(附源码)
从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...
- 使用tar命令解压的时候报错not in gzip format
使用tar命令解压一个xx.tar.gz压缩包的时候报错not in gzip format,后用file xx.tar.gz查看一下格式发现是html document text格式的...
- python(50):python 向上取整 ceil 向下取整 floor 四舍五入 round
取整:ceil 向下取整:floor 四舍五入:round 使用如下:
- 游戏框架设计中的。绑定binding。。。命令 command 和消息message 以及MVVM
游戏框架设计中的.绑定binding...命令 command 和消息message
- iOS开发-按钮的基本使用
// // ViewController.m // 05-用代码创建按钮 // // Created by vic fan on 2017/7/30. // Copyright © 2017年 ...
- 【Shell】总结·linux shell脚本攻略
第一章:小试牛刀 #变量赋值 var = value不同于var=value 把var=value写成var = value是一个常见的错误 前者是赋值操作,后者是相等操作 #let命令可以直接执行基 ...
- Beginning SDL 2.0(6) 音频渲染及wav播放
前面几篇关于SDL的文章介绍的是以画面为主,这里介绍下SDL中针对音频播放提供的机制,以及如何应用. 对于音频而言,有几个概念需要事先了解下,采样率.声道数.量化位数,如果你不清楚的话,麻烦先了解下这 ...
- Linux各个文件夹的作用~~~非常实用!!
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录 ...
- virsh的详细命令解析(一)
virsh的详细命令解析 virsh 有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式 virsh list 列出所有的虚拟机,虚拟机的状态有(8 ...
- 再论FreeRTOS中的configTOTAL_HEAP_SIZE
关于任务栈和系统栈的基础知识,可以参考之前的随笔.(点击这里) 这里再次说明:#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) ) 这个 ...