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. day 06

    深浅拷贝 # 值拷贝:应用场景最多ls = [1, 'abc', [10]]​ls1 = ls  # ls1直接将ls中存放的地址拿过来# ls内部的值发生任何变化,ls1都会随之变化​ls2 = l ...

  2. No bean named 'dataSource' is defined

    jar包导入多了,导jar包只需引用一次,如果dao层引用了pojo,然后service只需引用dao就可以引用pojo,然后重新maven install  就好了 如果删除导入多余的jar包不行, ...

  3. Algorithm 学习环境准备

    工作快5年了,因为是半路学习软件开发, 最近准备刷 LeetCode 复习基础, 看了一集 YouTube 视频 直通硅谷之路讲座 决定搭建一个 不依托于 编辑器 类似白板的开发环境, 因为 Atom ...

  4. C#线程同步(5)- 信号量 Semaphore

    文章原始出处 http://xxinside.blogbus.com/logs/47617134.html 预备知识:C#线程同步(1)- 临界区&Lock,C#线程同步(2)- 临界区&am ...

  5. kali linux安装教程及VMware Tool工具的安装

    一.Kali Linux在VMware下的安装 kali系统的简介 1.Kali Kali Linux是基于 Debian 的 Linux发行版,设计用于数字取证和渗透测试的操作系统.由Offensi ...

  6. 关于py的思考

    1.我希望py课程应该涉及到如何提高编程效率,因为已经c的编程基础,不是特别在意怎么用py,而是在意怎么用得更好 2.基本技能的话,掌握好各类基本函数的用法 3.理论课精讲,实验课独立操作,并把出现的 ...

  7. npm install

    npm install moduleName 命令 1. 安装模块到项目node_modules目录下.2. 不会将模块依赖写入devDependencies或dependencies 节点.3. 运 ...

  8. Nuget安装包

    Selenium.WebDriver Selenium.WebDriver.ChromeDriver Selenium.Firefox.WebDriver Selenium.WebDriver.IED ...

  9. NPOI 的使用姿势

    NPOI 正确的使用姿势 主要是需要注意公式和日期类型的单元格的读取. /// <summary> /// 打开指定 Excel 文件 /// </summary> /// & ...

  10. Markdown介绍

    如何使用.md文件 本文档为Markdown格式,建议利用Visual Studio Code+ Markdown All in One插件修改.参考链接:基础mdbasic,高级mdextended