使用JAXBContext 设置xml节点属性
作者:Dawn_Bells 发布时间:2021-09-21 00:05:44
标签:JAXBContext,xml,节点,属性
JAXBContext 设置xml节点属性
在使用JAXBContext将javaBean转化为xml时
会出现这样的需求:
<xml version="2.0">
....
</xml>
那么xml节点里的属性值version需要怎么设置
使用@XmlAttribute标签即可,如下代码。
@XmlRootElement(name = "Xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class RequestBean{
@XmlAttribute(name = "version") //设置节点属性
private String version;
private Body body;
@XmlElement(name = "sign") //设置子节点
private String sign;
//省略封装
}
@XmlRootElement(name = "Body")
@XmlAccessorType(XmlAccessType.FIELD)
public class Body{
...
}
最终得到的xml文件大致为:
<Xml version="2.0">
<sign>111111</sign>
<Body>
<Amount>111</Amount>
<Fee>fee</Fee>
<PayerName>payname</PayerName>
<AccountType>accountType</AccountType>
</Body>
</Xml>
JAXBContext解析XML集合对象
@XmlElementWrapper 为数组元素或集合元素定义一个父节点。
如,类中有一元素为List items,若不加此注解,该元素将被映射为
<items>...</items>
<items>...</items>
这种形式,此注解可将这个元素进行包装,如:
@XmlElementWrapper(name="items")
@XmlElement(name="item")
public List items;
将会生成这样的XML样式:
<items>
<item>...</item>
<item>...</item>
</items>
Demo如下:
实体类一(定义一个被包含的子项Item):
package org.ywzn.po;
import javax.xml.bind.annotation.XmlAttribute;
public class Item {
private String infoType;
private String nodeId;
private String resultCode;
private String resultString;
public Item() {
super();
}
public Item(String infoType, String nodeId, String resultCode,
String resultString) {
super();
this.infoType = infoType;
this.nodeId = nodeId;
this.resultCode = resultCode;
this.resultString = resultString;
}
@XmlAttribute(name = "InfoType")
public String getInfoType() {
return infoType;
}
public void setInfoType(String infoType) {
this.infoType = infoType;
}
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
public String getResultCode() {
return resultCode;
}
public void setResultCode(String resultCode) {
this.resultCode = resultCode;
}
public String getResultString() {
return resultString;
}
public void setResultString(String resultString) {
this.resultString = resultString;
}
}
实体类二(定义一个有List集合的实体类):
package org.ywzn.po;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Message {
private String version;
private Head head;
private List<Item> items;
@XmlAttribute(name="version")
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
@XmlElement(name="Head")
public Head getHead() {
return head;
}
public void setHead(Head head) {
this.head = head;
}
public List<Item> getItems() {
return items;
}
@XmlElementWrapper(name="Items")
@XmlElement(name="Item")
public void setItems(List<Item> items) {
this.items = items;
}
}
测试方法:
package org.ywzn.main;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.ywzn.po.Head;
import org.ywzn.po.Item;
import org.ywzn.po.Message;
import org.ywzn.po.Parameters;
import org.ywzn.po.Room;
public class Java2XMLMany {
public static void main(String[] args) {
// <?xml version='1.0' encoding='UTF-8' standalone='no' ?> <Message
// version='1.0'><Header Time='2015-05-22 10:34:27' MessageType='LOGIN'
// BusinessId='B730EB39-CEFF-4a38-B633-D8936EB8AEF7' SessionId='936'
// /><Parameters> <items Sum='1' Offset='1' Cur='1'> <item
// Infotype='LogUser'> <PassWord
// >D41D8CD98F00B204E9800998ECF8427E</PassWord></item> </items>
// </Parameters> </Message>
// TODO Auto-generated method stub
Item item = new Item("LOGIN","789", "xxx","xxx");
List<Item> list = new ArrayList<Item>();
list.add(item);
Head head = new Head("2015-05-21 16:46:14", "LOGIN", "8D24CE2B-5");
Parameters parameters = new Parameters(list);
// Message message = new Message(head,"1.0",parameters);
Message message = new Message();
message.setVersion("1.0");
message.setHead(head);
message.setItems(list);
try {
JAXBContext context = JAXBContext.newInstance(Message.class);
Marshaller createMarshaller = context.createMarshaller();
createMarshaller
.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
createMarshaller.marshal(message, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message version="1.0">
<Head businessId="8D24CE2B-5" MessageType="LOGIN" Time="2015-05-21 16:46:14"/>
<Items>
<Item InfoType="LOGIN">
<nodeId>789</nodeId>
<resultCode>xxx</resultCode>
<resultString>xxx</resultString>
</Item>
</Items>
</message>
来源:https://blog.csdn.net/Dawn_Bells/article/details/81908275


猜你喜欢
- 在 Kotlin 中,reduce() 和 fold() 是函数式编程中常用的高阶函数。它们都是对集合中的元素进行聚合操作的函数,将一个集合
- 问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该
- 程序如下:View Code /* * Hanoi塔游戏 问题描述: * 汉诺塔:汉诺塔(又称河内塔)问
- 1、spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name)2、在web.xm
- 一、项目简述功能包括: 前台+后台健身房管理系统,用户预订,教练选择。课程选 择,登录,后台管理等等。二、项目运行环境配置: Jdk1.8
- nacos升级spring cloud 2020.0无法使用bootstrap.yml之前用spring cloud整合nacos,需要一个
- 一.小伙伴们在做钱包支付中,相信会有个绕不过去的输入支付密码页面。下面小编给个效果图:898342572738938468.png实现的原理
- 目录一、什么是vector数组二、vector的基本操作vector数组的初始化向vector中插入元素删除元素遍历数组利用vector创建
- Semaphore、SemaphoreSlim 类两者都可以限制同时访问某一资源或资源池的线程数。这里先不扯理论,我们从案例入手,通过示例代
- 说明Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。Spring Security是一个专注于为Java应
- 前言之前其实有从鸿洋的文章有了解过AS的模板开发,一直想做一些自己经常使用的模板,以减少重复代码工作,但是发现太费劲了,所以一直搁置。然后昨
- 一、题目描述题目实现:一个服务器与多个客户端通信。通过一个服务器与多个客户端进行通信,运行程序,服务器启动后,启动两个客户端程序,然后通过服
- 什么是fescar?关于fescar的详细介绍,请参阅fescar wiki。传统的2PC提交协议,会持有一个全局性的锁,所有局部事务预提交
- 程序思路:动态加载V4和V2的mscorlib.dll程序集,通过反射进行比较。之所以加载mscorlib.dll 是因为framework
- 需求场景最近项目中要做一个音乐播放悬浮按钮的功能,最终实现效果如下:问题暴露悬浮窗布局文件就不放了,就是水平LinearLayout里面放几
- BroadcastReceiver静态注册案例演示,供大家参考,具体内容如下静态注册与动态注册的区别:动态注册:广播 * 可以自由的控制注册
- 一 点睛注解若想发挥更大作用,还需借助反射机制之力。通过反射,可以取得一个方法上声明的注解的全部内容。一般有两种需求:1 
- Spring Cloud Gateway使用Spring Cloud Gateway是一个基于Spring Boot 2.x和Spring&
- 在 Spring 中,有以下三种方式来创建数据源:通过 JNDI 获取应用服务器中的数据源;在 Spring 容器中配置数据源;通过代码来创
- 在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的。在Hibernate中我