pom.xml中引入如下依赖:

<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.2</version>
</dependency>
要转化的xml如下:person.xml

<?xml version="1.0" encoding="UTF-8"?>
<person>
   <username name="first-name">王哥</username>
   <phone-number name="tel-number" type="private">111122211</phone-number>
   <phone-number name="tel-number" type="public">22222222</phone-number>
   <address key="working_location">北京-xxxx</address>
   <sex>M</sex>
   <weight>75kg</weight>
</person>

下面直接贴代码:

Person.java

package com.xml.demo;

import org.eclipse.persistence.oxm.annotations.XmlPath;

import java.util.List;

public class Person {

@XmlPath("node[@name='first-name']/text()")
private String firstName;

private String sex;

private String weight;

private Address address;

@XmlPath("phone-number[@name='tel-number']")
private List<PhoneNumber> phoneNumbers;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getWeight() {
return weight;
}

public void setWeight(String weight) {
this.weight = weight;
}

public Address getAddress() {
return address;
}

public void setAddress(Address address) {
this.address = address;
}

public List<PhoneNumber> getPhoneNumbers() {
return phoneNumbers;
}

public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
Address.java

package com.xml.demo;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;

public class Address {

private String key;

@XmlValue
private String text; //地址具体名称

@XmlAttribute(name="key")
public String getKey() {
return key;
}

public void setKey(String key) {
this.key = key;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

public Address(String key, String text) {
this.key = key;
this.text = text;
}

public Address() {
}
}
PhoneNumber.java

package com.xml.demo;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class PhoneNumber {

@XmlAttribute
private String type;

@XmlValue
private String number;

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public PhoneNumber(String type, String number) {
this.type = type;
this.number = number;
}

public PhoneNumber() {
}
}
测试类:

package com.xml.demo;

import blog.predicate.Customer;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
import org.eclipse.persistence.jaxb.xmlmodel.ObjectFactory;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) throws Exception {
Person p=new Person();
p.setFirstName("王哥");
p.setSex("M");
p.setWeight("75kg");

Address addr=new Address("working_location","北京-xxxx");
p.setAddress(addr);

List<PhoneNumber> phoneNumbers=new ArrayList<PhoneNumber>();
PhoneNumber phoneNumber1=new PhoneNumber("private","111122211");
PhoneNumber phoneNumber2=new PhoneNumber("public","22222222");
phoneNumbers.add(phoneNumber1);
phoneNumbers.add(phoneNumber2);
p.setPhoneNumbers(phoneNumbers);

JAXBContext jc = JAXBContextFactory.createContext(new Class[]{Person.class, ObjectFactory.class},null);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(p, System.out);

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/main/resources/person.xml");
Person p1 = (Person) unmarshaller.unmarshal(xml);
System.out.println(p1.getAddress().getText());

}
}

复杂xml格式报文和实体类之间的转化的更多相关文章

  1. 接口中的xml报文和实体类的之间转换

    需求:湖南保险行业意健险承保风险预警平台数据接口 平台提供HTTPServlet服务,接受保险公司的数据请求,并在处理后返回给保险公司相应的处理结果.数据接口格式为XML数据报文,在每次接口的交易中, ...

  2. xml格式报文的拼装,和解析成实体类

    我们的微信支付,使用的是第三方的支付,某银行的微信支持渠道.所有的接口请求.应答都是xml格式报文,这样就需要用到xml格式报文的拼装和解析,这儿简单讲一下. 拼接xml格式报文. 从页面表单提交和配 ...

  3. xml转json和实体类的两种方式

    本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...

  4. (转)DATATABLE(DATASET)与实体类之间的互转.

    转自:http://www.cnblogs.com/zzyyll2/archive/2010/07/20/1781649.html dataset和实体类 之间的转换 //dataset转实体类  代 ...

  5. c# XML和实体类之间相互转换(序列化和反序列化)[砖]

    link: http://blog.okbase.net/haobao/archive/62.html by: 好饱 我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlU ...

  6. C# XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  7. XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  8. java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  9. XML之序列化C#实体类,DataTable,List

    1. static void Main(string[] args) { #region 实体类 Request patientIn = new Request(); patientIn.System ...

随机推荐

  1. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  2. 第二课丶pygame

    学号:2017*****1024 姓名:王劲松 我的码云贪吃蛇项目仓库:https://gitee.com/Danieljs/sesnake 分析游戏中的备注和问题:10分钟 游戏名称.分数改动:3分 ...

  3. JS(JavaScript)的进一步了解6(更新中···)

    元素的属性 div.attributes 是所有标签属性构成的数据集合 div.classList 是所有class名构成的数组集合 在classList的原型链上看以看到add()和remove() ...

  4. CentOS7.5 下搭建SFTP

    CentOS7.5 下搭建SFTP Linux 创建用户组 groupadd sftp 创建用户test useradd -G sftp -s /sbin/nologin test -s 禁止用户ss ...

  5. 防cc攻击策略

    黑客攻击你的网站,会采取各种各样的手段,其中为了降低你网站的访问速度,甚至让你的服务器瘫痪,它会不断的刷新你的网站,或者模拟很多用户同一时间大量的访问你的网站, 这就是所谓的CC攻击,这就需要我们在程 ...

  6. DAY18 常用模块(二)

    一.随机数:RANDOM 1.(0,1)小数:random.random() 2.[1,10]整数:random.randint(1,10) 3.[1,10)整数:random.randrang(1, ...

  7. 注入(injector)

    在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入. Java依赖注入设计原则允许我们移除硬编码依赖和 ...

  8. 面试题3--数组中的重复数字(new数组的新写法)

    总是忘了一些条件的判断,比如非空或者其他之类. #include<iostream> using namespace std; int Frepeat(int num[],int leng ...

  9. docker-compose的使用

    docker-compose的介绍 Compose是一个定义和管理多容器的工具,使用Python语言编写.使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像.数据卷.网络.映射端口等; ...

  10. python pyqt4问题记录

    在python中在终端中使用pip无法完成pyqt4的安装. 在官网下载相应的最新文件,在cmd中使用命令也无法实现安装 最终发现python最新的版本(现在已是3.7版本),无法安装. 解决办法为将 ...