废话不多说,直接上代码

核心类:

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. hdu Constructing Roads (最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1102 /************************************************* ...

  2. HTML5学习笔记(二十四):DOM扩展

    DOM扩展 DOM标准扩展最开始都是来自各个浏览器的自定义扩展DOM的功能,后被收录为标准的DOM相关API. 本笔记只记录被各大浏览器支持的标准扩展,对于特定浏览器的专有扩展不讨论. 选择符API ...

  3. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  4. pip升级Python程序包

    列出当前安装的包: pip list 列出可升级的包: pip list --outdate 升级一个包: pip install --upgrade requests // mac,linux,un ...

  5. strrchr()函数

    函数简介 函数名称: strrchr 函数原型:char *strrchr(const char *str, char c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str ...

  6. Using curl to upload POST data with files

    https://stackoverflow.com/questions/12667797/using-curl-to-upload-post-data-with-files ************* ...

  7. RTX——第19章 SVC 中断方式调用用户函数(后期补历程)

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式 ...

  8. spring batch中控制step的走向

    1.顺序执行step: <job id="job"> <step id="stepA" parent="s1" next= ...

  9. JAVA-JSP内置对象之page对象调用Servlet

    相关资料:<21天学通Java Web开发> page对象1.page对象代表JSP转译后的Servlet.2.通过page对象可以非常方便地调用Servlet类中定义的方法. pageD ...

  10. cas单点登录-jdbc认证(三)

    前言 本节的内容为JDBC认证,查找数据库进行验证,其中包括: 密码加密策略(无密码,简单加密,加盐处理) 认证策略(jdbc) 一.业务需求 不同的公司,需求业务需求或者架构不一样导致我们实现验证的 ...