废话不多说,直接上代码

核心类:

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的更多相关文章

  1. 使用JAXB解析xml文件(一)

      1.java中解析xml的几种方式 1.1 JDK原生dom形式 原理:一次性把xml读入内存,在内存中构建成树形结构.优点:对节点操作方便,缺点:需要大量的内存空间,浪费资源 1.2 SAX形式 ...

  2. JAXB解析XML为对象

    JAXB支持注解将XML转化为对象,具体看一个简单的例子: <?xml version="1.0" encoding="utf-8"?> <A ...

  3. jaxb解析xml工具类

    [quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote] package com.nnk.flowrecharge.common;im ...

  4. Jaxb解析xml准换为javabean

    先说下这个的背景吧,前些日子,有个以前的小同事说刚接触webservice,想解析下xml,记得我学的时候还是dom4j,sax的解析方式,最近看别人的代码用的jaxb的方式,觉得注解起来很简练,所以 ...

  5. 使用JAXB解析xml文件(二)

    前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解 1.@XmlRootElement 用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccess ...

  6. JAXB解析xml 的注解说明

      1.将 xml 文件中的各个节点和属性信息创建对应的Java模型 2.在Java模型中的创建与 xml 文件对应的节点和属性需要用注解来表示@XmlRootElement   将一个Java类映射 ...

  7. webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml

    1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...

  8. java生成解析xml的另外两种方法Xstream

    Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...

  9. java 中解析xml的技术

    最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表 ...

随机推荐

  1. JVM Troubleshooting

    案例分享:如何通过JVM crash 的日志和core dump定位和分析Instrument引起的JVM crash https://docs.oracle.com/javase/7/docs/we ...

  2. linux netstat 统计连接数查看

    服务器上的一些统计数据 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  3. (原创)拨开迷雾见月明-剖析asio中的proactor模式(二)

    在上一篇博文中我们提到异步请求是从上层开始,一层一层转发到最下面的服务层的对象win_iocp_socket_service,由它将请求转发到操作系统(调用windows api),操作系统处理完异步 ...

  4. DIOCP开源项目-Delphi高性能无锁队列(lock-free)

    最近想在DIOCP中加入任务调度线程,DIOCP的工作线程作为生产者(producer)将接受到的数据对象,投递到任务调度线程中,然后统一进行分配.然而这一切都需要一个队列, 这几天都在关注无锁队列. ...

  5. 网络广告CPS/CPC/CPV/CPM/CPA分别是什么意思

    CPA:注册广告(一般按用户来计算)CPC:点击广告(一般按一千个ip计算)CPS:消费广告(用户通过你的网站中投放的广告,达成消费,有提成)CPM:展示广告(展示广告,一般的视频比较多)CPV:按照 ...

  6. MediaType是application/x-www-form-urlencoded的接口测试方法

    先看接口: @POST @Path("/deleteById") //@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaTy ...

  7. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  8. visual studio如何附加到进程调试python命令

    既然是调试python脚本,那么我首先想到的是附加到进程(python.exe) 至于为什么不用F5直接启动python脚本呢,因为调用命令如下 C:> python test.py < ...

  9. Javascript 中ajax实现前台向后台交互

    第一种情况:前台传入字符串参数 后台返回json字符串.或是json数组  代码如下: 前台: $.ajax({ url: "xxx/xxx.action", data: &quo ...

  10. 第22章 RTX 低功耗之停机模式

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php STM32F103 停机模式介绍 本章节我们主要讲解停机模式,停机模式是在 Cortex™-M3 的深睡 ...