Java对象转xml(Object to Xml)

目录

  • 第一章、Java对象转xml
    • 1.1)Java实体类
    • 1.2)Xml中需要包含的字段
    • 1.3)设置根标签和属性序列化方式
    • 1.4)使用JAXBContext和Marshaller进行转换

友情提醒:

先看目录,了解文章结构,点击目录可跳转到文章指定位置。

第一章、Java对象转xml

1.1)Java实体类

这是需要转xml的实体类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName(value="productionissue")
public class ProductionIssue {@TableId(value = "id", type = IdType.AUTO)private Integer  id;@TableField("userid")private String userId;@TableField("title")private String title;@TableField("content")private String content;@TableField("orderNumber")private String orderNumber;@TableField("file")private byte[] file;@TableField("date")private String date;@TableField("sta")private String sta;
}

1.2)Xml中需要包含的字段

因为有些XML字段不在数据库对应的实体类中,所以需要额外建一个XML字段对应的实体类

import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;@Data
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class NewInc {@XmlElement(name = "WSUSER")private String wsUser;@XmlElement(name = "WSPASSWORD")private String wsPassword;@XmlElement(name = "CREATOR")private String userId;@XmlElement(name = "CREATORCONTACT")private String creatorContact;@XmlElement(name = "SOURCE")private String source;@XmlElement(name = "SUMMARY")private String title;@XmlElement(name = "DESCRIPTION")private String content;@XmlElement(name = "PRIORITY")private String priority;@XmlElement(name = "URGENCY")private String urgency;@XmlElement(name = "REFLECTCANAL")private String reflectCanal;@XmlElement(name = "HAPPENTIME")private String date;@XmlElement(name = "ISEFFECTBUSINESS")private String isEffectBusiness;@XmlElement(name = "ISEFFECTBUSINESS")private String effectSituation;@XmlElement(name = "ISACCOUNT")private String isAccount;@XmlElement(name = "ISREGULATOR")private String isRegulator;@XmlElement(name = "ISBIGCUSTOMER")private String isBigCustomer;}

1.3)设置根标签和属性序列化方式

@XmlRootElement和@XmlAccessorType是JAXB中用于控制Java对象与XML之间映射关系的注解。@XmlRootElement用于指定生成的XML的根标签名,而@XmlAccessorType用于指定属性的序列化方式。


import lombok.Data;
import javax.xml.bind.annotation.*;
import java.util.List;@Data
@XmlRootElement(name="HAPPY")   //根标签名
@XmlAccessorType(XmlAccessType.FIELD)  //属性序列化
public class NewIncXml {@XmlElement(name = "IN")private List<NewInc> newIncs;public List<NewInc> getNewIncs() {return newIncs;}public void setNewIncs(List<NewInc> newIncs) {this.newIncs = newIncs;}
}

1.4)使用JAXBContext和Marshaller进行转换

将从数据库中获取的NewInc对象转换为XML格式,并输出每个NewInc对象的XML表示。方便地将Java对象转换为XML数据进行处理或传输。

具体逻辑:
遍历List中的每个NewInc对象:
创建一个新的List对象newIncsOne,并将当前NewInc对象添加到这个List中。
创建一个NewIncXml对象xml,并设置其List newIncs属性为newIncsOne。
创建一个StringWriter对象writer用于将XML数据写入。
使用JAXBContext和Marshaller将NewIncXml对象转换为XML格式,并将结果写入到StringWriter中。
打印输出转换后的XML数据

package com.icbc.coresd.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.icbc.coresd.entity.NewInc;
import com.icbc.coresd.entity.NewIncXml;
import com.icbc.coresd.entity.ProductionIssue;
import com.icbc.coresd.mapper.ProductionIssueMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;@Service
public class ProductionIssueServiceImpl {@AutowiredProductionIssueMapper productionIssueMapper;/*查询数据库productionissue表数据,设置到NewInc*/public List<NewInc> selectAll() {LambdaQueryWrapper<ProductionIssue> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(ProductionIssue::getSta,0 ).select(ProductionIssue::getTitle,ProductionIssue::getDate,ProductionIssue::getContent);List<ProductionIssue> productionIssuesList = productionIssueMapper.selectList(queryWrapper);List<NewInc> newIncList = new ArrayList<>();for (ProductionIssue pi : productionIssuesList) {NewInc newInc = new NewInc();// 将User的属性映射到Product的属性newInc.setUserId(pi.getUserId());newInc.setTitle(pi.getTitle());newInc.setContent(pi.getContent());newInc.setDate(pi.getDate());newInc.setWsUser("name");newInc.setWsPassword("pass123");newInc.setCreatorContact("user@mail");newInc.setSource("固定");newInc.setPriority("6");newInc.setUrgency("02");newInc.setReflectCanal("14");newInc.setIsEffectBusiness("是");newInc.setEffectSituation("file");newInc.setIsAccount("否");newInc.setIsRegulator("否");newInc.setIsBigCustomer("否");newIncList.add(newInc);}return newIncList;}public void build() {List<NewInc> newIncsList = selectAll();System.out.println(newIncsList.size());for (int i = 0; i < newIncsList.size(); i++) {NewInc newInc = newIncsList.get(i);// 对取出的数据进行操作List<NewInc> newIncsOne = new ArrayList<>();newIncsOne.add(newInc);NewIncXml xml = new NewIncXml();xml.setNewIncs(newIncsOne);StringWriter writer = null;try {JAXBContext context = JAXBContext.newInstance(NewIncXml.class);Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);writer = new StringWriter();writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");marshaller.marshal(xml, writer);} catch (JAXBException e) {e.printStackTrace();}System.out.println(writer.toString());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构书后习题

p17 1&#xff0c; 个人解答&#xff1a; int DeleteMinElem(SqList &L,int &min) {int j 0;if (L.length 0){printf("error!");return 0;}int min L.data[0];for (int i 1; i < L.length; i){if (L.data[i] < min){min L.data[i];j i;}}L.dat…

cesium 调整3dtiles的位置 世界坐标下 相对坐标下 平移矩阵

cesium调整3dtiles的位置用到的是平移矩阵&#xff0c;原理是在世界坐标系中用偏移点减去原始点得到一个平移向量&#xff0c;再根据这个向量得到平移矩阵。 原始点&#xff1a;一般是模型的中心点位置&#xff0c;可通过模型的包围盒得到偏移点&#xff1a;可分为两种情况&…

Docker八股总结

1. 容器和虚拟机的区别 传统虚拟机技术是虚拟出一套硬件后&#xff0c;在其上运行一个完整操作系统&#xff0c;在该系统上再运行所需应用进程&#xff1b;而容器内的应用进程直接运行于宿主的内核&#xff0c;容器内没有自己的内核&#xff0c;而且也没有进行硬件虚拟。因此容…

【MATLAB源码-第191期】基于matlab的4QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术&#xff0c;作为一种高效的调制方案&#xff0c;能够通过在相同的带宽条件下传输更多的数据位来满足这一需求。…

代码随想录 回溯—组合

递归函数三部曲&#xff1a; 递归函数参数返回值 确定终止条件 单层递归逻辑 思路&#xff1a;result存组合结果&#xff0c;path存一个结果生成的路径&#xff0c;回溯函数的参数除了所传进去的n和k&#xff0c;还要传进一个起始点startIndex&#xff0c;这就是确定了参数返…

EasyImage2.0 简单图床开源 多功能 简单易用图床系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格…

物联网与服务器有什么样的联系?

当今物联网是比较火的词汇&#xff0c;那么物联网是什么呢&#xff1f;物联网对人们的生活会产生哪些影响呢&#xff1f;。说的通俗一点物联网就是将设 备接入网络&#xff0c;实现设备智能化。那么物联网与服务器又有着怎样的联系呢&#xff1f;下面我们就一起来探讨一下这个问…

Lua中文语言编程源码-第九节,更改ltablib.c 表格操作函数, 使Lua加载中文库关键词(执行诸如查找、插入、删除、排序等表格操作)

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的ltablib.c 表格操作函数&#xff0c;此模块是C语言编写的&#xff0c;是Lua语言中的一个库文件&#xff0c;主要用来提供表格操作的功能。 该库提供了许多函数&…

【免费题库】华为OD机试 - 字符串排序(Java JS Python C C++)

须知 哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持 文章目录 须知题目描述用例1解题思路:Java代码:JS代码:Python代码:C代码:C++代码:题目描述 排序规则: 单词中字母比较不区分大小写,两个单词先以第一个字母作为排序的基准…

突破“三个九”!离子阱量子计算再创新高

如果把量子计算比作一场球赛&#xff0c;Quantinuum无疑又打了一记漂亮的好球。实际上&#xff0c;结合今年春季在量子体积、逻辑量子比特和布线问题等方面的进展&#xff0c;这个团队已经接近于完成一场完美的比赛。 3月&#xff0c;Quantinuum的研究人员证明了QCCD架构的可扩…

Vue-router 路由钩子在生命周期的体现

一、Vue-Router导航守卫 有的时候&#xff0c;需要通过路由来进行一些操作&#xff0c;比如最常见的登录权限验证&#xff0c;当用户满足条件时&#xff0c;才让其进入导航&#xff0c;否则就取消跳转&#xff0c;并跳到登录页面让其登录。 为此有很多种方法可以植入路由的导航…

RESTful API构建 web 应用程序

RESTful API&#xff08;Representational State Transfer&#xff09;是一种用于构建网络服务的架构风格。它基于 HTTP 协议&#xff0c;并采用资源的概念来定义和管理 API。在 RESTful API 中&#xff0c;每个资源都有一个唯一的标识符&#xff08;URI&#xff09;&#xff0…

如何使用ModStart搭建一个文库系统

使用ModStart搭建一个文库系统涉及多个步骤&#xff0c;以下是一个基本的指南&#xff1a; 环境准备&#xff1a; 确保你的服务器环境已经安装了PHP和MySQL&#xff0c;并且它们的版本满足ModStart的要求。下载并安装ModStart。你可以从官方网站或GitHub上下载最新版本的ModSta…

Linux学习之路 -- PCB介绍 -- 进程优先级

1、什么是优先级&#xff1f; 进程需要某一种资源&#xff0c;而系统要通过特定的方式来决定谁先获得这些资源&#xff0c;而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。 2、为什么要有优先级 因为资源的缺乏&#xff0c;所以系统的才会…

C# 开源 工业相机库 调用海康相机 大恒相机

C# MG.CamCtrl 工业相机库 介绍一、使用案例二、使用介绍1、工厂模式创建实例2、枚举设备&#xff0c;初始化3、启动相机4、取图5、注销相机 三、接口1、相机操作2、启动方式3、取图4、设置/获取参数 介绍 c# 相机库&#xff0c;含海康、大恒品牌2D相机的常用功能。 底层采用回…

Django模型的字段选项

每一种字段类型都需要指定一些特定的参数。例如&#xff0c;CharField&#xff08;及其子类&#xff09;需要接收一个max_length参数&#xff0c;用以指定数据库存储VARCHAR数据时的字节数。 一些可选的参数是通用的&#xff0c;可以用于任何字段类型&#xff0c;下面具体介绍…

访问学者申请的成功经验

在申请成为访问学者时&#xff0c;经验是至关重要的。下面知识人网小编将介绍一些可以帮助您成功申请的经验和技巧。 首先&#xff0c;了解目标机构或大学的研究方向和需求是非常重要的。在申请之前&#xff0c;仔细研究该机构的学术项目、研究成果以及教授的专业领域&#xff…

C++笔试强训day2

目录 1.牛牛的快递 2. 最小花费爬楼梯 3.数组中两个字符串的最小距离 1.牛牛的快递 链接 单纯分类讨论&#xff0c;不加赘述。 详细代码&#xff1a; #include <iostream> using namespace std; #define ll long long int main() { float mg; char st; cin >>…

[C++][算法基础]最大公约数(欧几里得算法)

给定 n 对正整数 ,&#xff0c;请你求出每对数的最大公约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数对 ,。 输出格式 输出共 n 行&#xff0c;每行输出一个整数对的最大公约数。 数据范围 1≤n≤, 1≤,≤2 输入样例&#xff1a; 2 3 …

C/C++基础----内存相关

malloc分配内存 用法 参数为要开辟内存的大小&#xff08;字节为单位&#xff09;返回值为void*,所以要强转一下语法&#xff1a;malloc()动态开辟20个字节的内存&#xff0c;代码&#xff1a;#include <iostream>using namespace std;int main() {int *a (int *) mal…