使用JAXBContext轻松实现Java和xml的互相转换方式

JAXBContext实现Java和xml的互相转换

类文件注解:@XmlRootElement不可缺少

<span style="font-size:14px;">@XmlRootElement
public class Man {
    private String name;
    private int age;
    public Student() {
        super();
    }
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}  </span>

Java 转换 Xml:

@Test
public void testJava2Xml(){
    try {
        JAXBContext jc = JAXBContext.newInstance(Man.class);
        Marshaller ms = jc.createMarshaller();
        Man man = new Man("man",100);
        ms.marshal(man, System.out);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}  

Xml 转换 Java:

@Test
public void testXml2Java() throws JAXBException{
    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Man><age>100</age><name>man</name></Man>";
    JAXBContext jc = JAXBContext.newInstance(Man.class);
    Unmarshaller unmar = jc.createUnmarshaller();
    Man man = (Man) unmar.unmarshal(new StringReader(xml));
    System.out.println(man.getName());
} 

JAXBContext 解析 xml

前提:

package com.sgcc.load.vo;
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.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "gldxresult")
@XmlAccessorType(XmlAccessType.FIELD)
public class XmlAnalysis { // 泛化, 聚合
	@XmlElement(name = "success")
	private String success;
	@XmlElement(name = "totalnum")
	private String totalnum; 

    @XmlElement(name = "accounts")
    List<Accounts> accounts = new ArrayList<>();

	public List<Accounts> getAccounts() {
		return accounts;
	}

	public void setAccounts(List<Accounts> accounts) {
		this.accounts = accounts;
	}

	public String getSuccess() {
		return success;
	}

	public void setSuccess(String success) {
		this.success = success;
	}

	public String getTotalnum() {
		return totalnum;
	}

	public void setTotalnum(String totalnum) {
		this.totalnum = totalnum;
	}
}
package com.sgcc.load.vo;
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.XmlElement;
@SuppressWarnings("serial")
@XmlAccessorType(XmlAccessType.FIELD)
public class Accounts extends ArrayList<Account>{

   @XmlElement(name = "account")
   public List<Account> getAccount() {
	        return this;
   }
}
package com.sgcc.load.vo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
@XmlAccessorType(XmlAccessType.FIELD)
public class Account {
	@XmlElement(name = "seqid")
	private String seqid;
    @XmlElement(name = "dxid")
    private String dxid;
    @XmlElement(name = "compid")
    private String compid;
    @XmlElement(name = "rspcode")
    private String rspcode;
    @XmlElement(name = "code")
    private String code;
    @XmlElement(name = "name")
    private String name;      

	public String getSeqid() {
		return seqid;
	}
	public void setSeqid(String seqid) {
		this.seqid = seqid;
	}
	public String getDxid() {
		return dxid;
	}
	public void setDxid(String dxid) {
		this.dxid = dxid;
	}
	public String getCompid() {
		return compid;
	}
	public void setCompid(String compid) {
		this.compid = compid;
	}
	public String getRspcode() {
		return rspcode;
	}
	public void setRspcode(String rspcode) {
		this.rspcode = rspcode;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

测试:

package com.sgcc.load.test;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.sgcc.load.vo.Accounts;
import com.sgcc.load.vo.XmlAnalysis;
import groovyjarjarcommonscli.ParseException;
public class Test {

	private static XmlAnalysis transToVOs(String webserviceMsg) throws JAXBException, ParseException {
		final StringReader reader = new StringReader(webserviceMsg);
		JAXBContext ctx=JAXBContext.newInstance(new XmlAnalysis().getClass());
		Unmarshaller um=ctx.createUnmarshaller();
		XmlAnalysis ds=(XmlAnalysis)um.unmarshal(reader);
		return ds;
	}
	public static void main(String[] args) {
		String xmlMsg = "<?xml version=\"1.0\" encoding=\"GBK\"?> \n<gldxresult><success>0</success><totalnum>1</totalnum>"+
"<accounts><yzy>hahaha</yzy><account><seqid></seqid><dxid>1136005118</dxid><compid>0603</compid><rspcode>New0001</rspcode><rspmsg>值:00 没有匹配到分类</rspmsg>"+
"<code>EHBSXPZYFDC000</code><name>哈哈哈哈哈哈哈哈哈</name></account></accounts></gldxresult>";

		try{
			XmlAnalysis transToVOs = transToVOs(xmlMsg);
            for(int index = 0;index<transToVOs.getAccounts().get(0).getAccount().size();index++){
    			System.out.println(transToVOs.getAccounts().get(0).getAccount().get(index).getName());
            }
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java Bean与xml互相转换的方法分析

    本文实例讲述了Java Bean与xml互相转换的方法.分享给大家供大家参考,具体如下: XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bean的转换 用到xml的时候我们需要遍历解析...然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好 我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢

  • Jaxb2实现JavaBean与xml互转的方法详解

    本文实例讲述了Jaxb2实现JavaBean与xml互转的方法.分享给大家供大家参考,具体如下: 一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档. Jaxb 2.0是JDK 1.6的组成部分.我们不需要下载第三方jar包 即可做到轻松转换.Jaxb2使用了JD

  • xml与Java对象的转换详解

    xml与Java对象的转换详解 1.xstream解析报文 XStreamComponent x = XStreamComponent.newInstance(); x.processAnnotations(new Class[]{EquityExchangeDetail.class,PearTicketCustomerDTO.class,Date.class,Integer.class}); EquityExchangeDetail ptd = (EquityExchangeDetail) x

  • java利用JAXB实现对象和xml互相转换方法与实例详解

    1.JAXB应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类 包含list(set同理).map.Teacher.Date 类型的属性 package jaxb; import java.util.Date; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.XmlAc

  • java实现Xml与json之间的相互转换操作示例

    本文实例讲述了java实现Xml与json之间的相互转换操作.分享给大家供大家参考,具体如下: 旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exercise.xml; import net.sf.json.JSON; import net.sf.json.JSONSerializer; import net.sf.json.xml.XMLSerial

  • 使用JAXBContext轻松实现Java和xml的互相转换方式

    JAXBContext实现Java和xml的互相转换 类文件注解:@XmlRootElement不可缺少 <span style="font-size:14px;">@XmlRootElement public class Man { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.

  • java将XML文档转换成json格式数据的示例

    本文介绍了java将XML文档转换成json格式数据的示例,分享给大家,具体如下: 功能 将xml文档转换成json格式数据 说明 依赖包: 1. jdom-2.0.2.jar : xml解析工具包; 2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 程序源代码 package com.xxx.open.pay.util; import com.alibaba.fastjson.JSONObject; import org.jdom2.Element; imp

  • Java解析XML(4种方式)案例详解

    目录 1.DOM方式 2.SAX方式 3.JDOM方式 4.DOM4J方式 总结 xml文件 <?xml version="1.0" encoding="utf-8" ?> <class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <nickname>stars1</nicknam

  • Java解析XML的四种方式

    xml文件 <?xml version="1.0" encoding="utf-8" ?> <class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <nickname>stars1</nickname> <marks>85</marks> </

  • java解析xml的4种方式的优缺点对比及实现详解

    一.介绍及优缺点分析 DOM(Document Object Model) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的. [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. 整个文档树在内存中

  • Java web xml文件读取解析方式

    其实解析xml文件有四种方式:DOM,JDOM,DOM4J,SAX. 我们来说与平台无关的两种官方解析方式:DOM 和 SAX 一.DOM 解析 在 Java 代码中,xml 文件是标记型文档,这时用 dom 来解析 xml 文件 dom 会根据 html 的层级结构在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象 DOM 解析步骤: 1.使用 newInstance 方法,创建一个 DocumentBuilderFactory 的对象. 2.创建一个 DocumentBuil

  • java中xml进行报文发送和解析操作

    利用OKhttp网络框架,进行Maven项目管理 //报文发送 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.8.0</version> </dependency> //报文解析 <dependency> <groupId>xom</gr

  • 关于Java中XML Namespace 命名空间问题

    根据Namespaces in XML W3C 推荐标准的定义,XML命名空间是由国际化资源标识符 (IRI) 标识的 XML 元素和属性集合:该集合通常称作 XML"词汇". 定义 XML 命名空间的主要动机之一是在使用和重用多个词汇时避免名称冲突.XML 模式用于为 XML 实例创建一个词汇并频繁使用命名空间.因此,正确理解命名空间概念对于从总体上理解 XML 模式和实例验证至关重要. 命名空间在多个方面类似于 Java 中的程序包: Java 中的程序包可以包含许多可重用的类和接

  • 轻松了解java中Caffeine高性能缓存库

    目录 轻松lCaffeine 1.依赖 2.写入缓存 2.1.手动写入 2.2.同步加载 2.3.异步加载 3.缓存值的清理 3.1.基于大小的清理 3.2.基于时间的清理 3.3.基于引用的清理 4.缓存刷新 5.统计 轻松lCaffeine 1.依赖 我们需要将Caffeine依赖添加到我们的pom.xml中: <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId&g

  • java生成XML的方法【附demo源码下载】

    本文实例讲述了java生成XML的方法.分享给大家供大家参考,具体如下: 下拉框的生成,我是通过javascript读取xml文件生成的.Xml文件是根据数据库生成的.Xml文件只相当于页面到数据库的一道缓存.这样利于性能.生成xml文件又是一件繁琐的事情.只好交给机器去做了.真正的情景是程序定期自动或人为手动触发程序生成xml.今天我单独把xml文件生成的功能剥离出来写了一个小程序. 具体的实现是,使用jxl.jar读取(我承认我很喜欢使用Execel写配置)的SQL语句.SQL要指明哪些是名

随机推荐