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 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表 ...
随机推荐
- 【iOS XMPP】使用XMPPFramewok(五):好友列表
转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/17/3082226.html 好友列表 好友列表,在 XMPP 中被称为 roster,花名 ...
- vue2.0 组件化及组件传值
组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下, ...
- node调试的两种方法
刚开始学node.js的时候,一直在用node-inspector,虽然很麻烦,但聊胜于无.后面公司牛人推荐使用node-webkit,就再也没用过node-inspector.再后来node.js版 ...
- 2-7-集合运算(A-B)∪(B-A)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第2章 线性表 - 集合运算(A-B)∪(B-A) ——<数据结构>-严蔚敏.吴伟民版 ★有疑问先阅读★ 源码使用说明 链接☛☛☛ <数据结构-C语言 ...
- angular学习笔记(三十)-指令(7)-compile和link(1)
这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...
- docker容器资源配额控制
转自:http://blog.csdn.net/horsefoot/article/details/51731543 文/ 天云软件 容器技术团队 Docker通过cgroup来控制容器使用的资源配额 ...
- 【转】Android项目使用Ant打包,生成build.xml
记不住,于是原帖转过来,请看原帖:http://blog.csdn.net/ms03001620/article/details/8490238 一.生成build.xml Eclipse中使用Ant ...
- Asp.Net MVC TryUpdateModel使用说明
修改功能每个网站里都有,也有很多写法 写法1:要修改的字段刚好等于表中的字段 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edi ...
- Logstash写入MongoDB数据库
1. 列出logstash-plugins bin/logstash-plugin list****** logstash-output-kafkalogstash-output-nagioslogs ...
- 应对新型“蠕虫”式比特币勒索软件“wannacry”的紧急措施
1.防火墙屏蔽445端口 命令行操作: 以管理员打开命令行执行以下命令 netsh firewall set opmode enable netsh advfirewall firewall add ...