java对象数据转xml文件(加<![CDATA[]]>)[注解方式]

XML中配置数据库的方法和配置注解事务 一.配置注解事务 1.先在application.xml中引入注解事务的核心对象,开启事务管理 <!--配置注解事务 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"><... 阅读详情
AI摘要

本文详细介绍了如何将Java对象转换为XML文件,并记录了一系列注解的使用方法,以及解决XML特殊字符转义问题的技巧。

java对象数据转xml文件

    这种操作一般发生在导出文件,我在这里记录一下这一系列注解的使用,还有我遇到的问题及解决方法;
    问题:对象属性中有可能存在计算逻辑'<'或'>',而在xml文件中这两个符号是不合法的,会转换为&lt和&gt,这样数据就'坏'了,所以<![CDATA[]]>的加入是非常有必要的!

需要导入类

1.这是在你需要导出的实体类中用到的(一般都是DTO[扩展类])
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
2.这是解决<,>两个符号自动转化的工具类用到的
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

注解的使用

1.@XmlRootElement,用于类级别的注解,对应xml的跟元素。通过name属性定义这个根节点的名称。
2.@XmlAccessorType,定义映射这个类中的何种类型都需要映射到xml。(如果不存在@XmlAccessorType,默认使用XmlAccessType.PUBLIC_MEMBER注解)
  参数:XmlAccessType.FIELD: java对象中的所有成员变量。
  XmlAccessType.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量。
  XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量。
  XmlAccessType.NONE: java对象的所有属性都不映射为xml的元素。
3.@XmlAttribute,用于把java对象的属性映射为xml的属性,并可通过name属性为生成的xml属性指定别名。
4.@XmlElement,指定一个字段或get/set方法映射到xml的节点。通过name属性定义这个根节点的名称。
5.@XmlElementWrapper,为数组或集合定义一个父节点。通过name属性定义这个父节点的名称。

xml,javaBeen的相互装换

public class JaxbUtil
{

    /**
     * 日志
     */
    private static final Log _logger = LogFactory.getLog (JaxbUtil.class);

    public static String convertToXml (Object obj)
    {
        return convertToXml (obj, "UTF-8");
    }

    /**
     * JavaBean转换成xml
     * 
     * @param obj
     * @param encoding
     * @return
     */
    public static String convertToXml (Object obj, String encoding)
    {
        String result = null;
        try
        {
            JAXBContext context = JAXBContext.newInstance (obj.getClass ());
            Marshaller marshaller = context.createMarshaller ();
            marshaller.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty (Marshaller.JAXB_ENCODING, encoding);
            StringWriter writer = new StringWriter ();
            marshaller.marshal (obj, writer);
            result = writer.toString ();
        }
        catch (Exception ex)
        {
            _logger.error (ex.getMessage (), ex);
        }
        return result;
    }

    /**
     * xml转换成JavaBean
     * 
     * @param xml
     * @param c
     * @return
     */
    @SuppressWarnings ("unchecked")
    public static <T> T converyToJavaBean (String xml, Class <T> c)
    {
        T t = null;
        try
        {
            JAXBContext context = JAXBContext.newInstance (c);
            Unmarshaller unmarshaller = context.createUnmarshaller ();
            t = (T) unmarshaller.unmarshal (new StringReader (xml));
        }
        catch (Exception ex)
        {
            _logger.error (ex.getMessage (), ex);
        }
        return t;
    }

}

解决保护数据问题的工具类

public class CDataAdapter extends XmlAdapter <String, String>
{
    @Override
    public String marshal (String v) throws Exception
    {
        return "<![CDATA[" + v + "]]>";
    }
    @Override
    public String unmarshal (String v) throws Exception
    {
        if ("<![CDATA[]]>".equals (v))
        {
            return "";
        }
        String v1 = null;
        String v2 = null;
        String subStart = "<![CDATA[";
        int a = v.indexOf (subStart);
        if (a >= 0)
        {
            v1 = v.substring (subStart.length (), v.length ());
        }
        else
        {
            return v;
        }
        String subEnd = "]]>";
        int b = v1.indexOf (subEnd);
        if (b >= 0)
        {
            v2 = v1.substring (0, b);
        }
        return v2;
    }

}

对应实例

定义类

@XmlAccessorType (XmlAccessType.FIELD)
@XmlRootElement
@XmlType (name = "indicatorDefine", propOrder =
{ "indCode", "indDescs", "indTypeCode", "monTableName", "monTableDescs", "monTableFieldName", "monTableFieldDescs",
  "validateType", "validateDescs", "validateScript", "validateMethod", "relateTable", "relateScript", "stabilityIdx",
  "minValue", "maxValue", "enableStatus" })
public class IndicatorDefineExportDto implements Serializable
{
    private static final long serialVersionUID = 4903249232957489027L;
    @XmlElement (name = "indCode")
    private String indCode;
    @XmlElement (name = "indDescs")
    private String indDescs;
    @XmlElement (name = "indTypeCode")
    private String indTypeCode;
    @XmlElement (name = "monTableName")
    private String monTableName;
    @XmlElement (name = "monTableDescs")
    private String monTableDescs;
    @XmlElement (name = "monTableFieldName")
    private String monTableFieldName;
    @XmlElement (name = "monTableFieldDescs")
    private String monTableFieldDescs;
    @XmlElement (name = "validateType")
    private String validateType;
    @XmlElement (name = "validateDescs")
    private String validateDescs;
    @XmlJavaTypeAdapter (CDataAdapter.class)//这里是该属性需要加<![CDATA[]]>防止转换的注解
    @XmlElement (name = "validateScript")
    private String validateScript;
    @XmlElement (name = "validateMethod")
    private String validateMethod;
    @XmlJavaTypeAdapter (CDataAdapter.class)//这里是该属性需要加<![CDATA[]]>防止转换的注解
    @XmlElement (name = "relateTable")
    private String relateTable;
    @XmlElement (name = "relateScript")
    private String relateScript;
    @XmlElement (name = "stabilityIdx")
    private String stabilityIdx;
    @XmlElement (name = "minValue")
    private String minValue;
    @XmlElement (name = "maxValue")
    private String maxValue;
    @XmlElement (name = "enableStatus")
    private String enableStatus;
    //get,set方法省略
    }

@XmlAccessorType (XmlAccessType.FIELD)
@XmlRootElement (name = "IndicatorDefineData")
@XmlType (propOrder =
{ "indicatorDefines" })
public class IndicatorDefines implements Serializable
{

    /**
     * serialVersionUID:TODO
     * 
     * @since Ver 1.1
     */
    private static final long serialVersionUID = 3140176739363502638L;

    @XmlElementWrapper (name = "indicatorDefines")
    @XmlElement (name = "indicatorDefine")
    private List <IndicatorDefineExportDto> indicatorDefines;

使用

List <IndicatorDefineExportDto> indicatorDefineExportDtos = new ArrayList <IndicatorDefineExportDto> ();
IndicatorDefineExportDto indicatorDefineExportDto = new IndicatorDefineExportDto ();
//省略查询数据操作
//indicatorDefineInfos--查询到的数据
 for (IndicatorDefine indicatorDefine : indicatorDefineInfos){
 IndicatorDefineExportDto indicatorDefineExportDto = new IndicatorDefineExportDto ();
 //省略...
 //将indicatorDefine数据赋值到indicatorDefineExportDto 属性上
 indicatorDefineExportDtos.add (indicatorDefineExportDto);
 }
 indicatorDefines.setIndicatorDefines (indicatorDefineExportDtos);
 //生成xml内容
 String xmlContent = JaxbUtil.convertToXml (indicatorDefines);
 //以下省略...就是将文件传到前台

效果

Java XML 文件的 DTD 解析规则,DOM 方式解析 XML HTML,Hyper Text Markup Language,超级文本标记(标签)语言 出现目的是服务器给浏览器发送响应信息, 浏览器按照规则解析语言并进行展示 XML,eXtensible Markup Language,可扩展标记(标签)语言 创建 XML 的宗旨不是为了扩展 HTML, 而是为了数据的存储和传输 (1)写法 创建 .xml 文件,建议在文件的第一行添加头信息 <?xml version="1.0" encoding="UTF-8" > (2)规则 阅读详情

相关推荐

XStream实现XML与Java对象互转

文章目录概要XStream简介示例 概要 XStream简介 示例 概要 XStream简介 XStream是个很强大的工具,能将java对象和xml之间相互转化。xstream不在意java类中成员变量是私有还是公有,也不在乎是否有默认构造函数。它调用方式也非常简单:从xml对象转化为java对象,使用fromXML()方法;从java对象序列化为xml,toXML()即可,很方...

jamesluozhiwei的博客 701

<![CDATA[ ]]>的简单使用

<![CDATA[ ]]>的简单使用

handsome_sai的博客 3万+

Java后端开发(四)-- MySql | <![CDATA[ ]]>的使用详解

mapper文件中写sql语句时,遇到特殊字符时,如:< 等,建议使用<![CDATA[ ..... ]]>,将包裹的内容不被解析器解析。"&"的产生错误,是因为解析器会把该字符解释为字符实体的开始。由于XML文件对于元素为"<"和"&"是非法的,不符合规则。"<"的产生错误,是因为解析器会把该字符解释为新元素的开始。指的是不应由XML解析器进行解析的文本数据。

PUYALEI的博客 2456

mybatis(下)——<![CDATA[…]]>、动态sql语句详解、懒加载、缓存、逆向工程、纯注解操作数据库

动态sql自动删除多余有含义的字符 if标签 where标签 <![CDATA[sql语句]]> mybatis目录动态SQL一、if标签last、mybatisgenerator逆向工程 动态SQL 实际开发过程中需要使用比较复杂的sql语句,但是自己通过字符串的拼接,比较容易出现错误,那么为了解决这些问题mybatis提供了动态sql。 什么是动态sql? 使用一些标签动态拼接sql语句,mybatis可以自动删除一些多余的字符(逗号、and关键字等)、添加一些必须的字符(空格等),预防s

Today_He的博客 9177

<![CDATA[ ]]>基于实例详述其用法及说明

通过实例详述xml文件中的<![CDATA[ ]]>用法及说明。

念兮为美 6738

JAVA对象转换成XML(CDATA)

XML 元素中,"<" 和 "&" 是非法的。"CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。

JAXB 使用记录 bean转xml xml转bean 数组 继承 CDATA(转义问题)

JAXB 使用记录 bean转xml xml转bean 数组 继承 CDATA(转义问题)

weixin_44326073的博客 1926

i.MX RT1064引脚配置与BGA封装选型实战指南

在嵌入式硬件设计中,引脚配置与PCB布局是连接芯片手册与物理实现的关键桥梁,直接影响系统的稳定性与信号完整性。其核心原理在于理解处理器的IOMUX(输入/输出多路复用器)系统与多电源域架构,前者通过软件配置实现引脚功能的灵活复用,后者则为不同外设接口提供独立的电压基准,是保障电源稳定性的基石。从技术价值看,合理的引脚规划能规避信号干扰、电源不稳等潜在风险,提升设计一次成功率。在应用场景上,无论是连接SDRAM、USB、SDIO等高速外设,还是配置UART、I2C等中低速接口,都需要遵循特定的布局布线规则。本

weixin_33217202的博客 314

Java xml数据格式返回实现

前言:对于服务器后端开发,实现的大部分接口,返回的数据格式一般要求都是json,但是也有使用xml格式的 网上有多种实现方式,这里使用注解的方式把java类 使用@RequestBody实现Java对象和XML/JSON数据自动转换 很多人会认为接口方法使用@Controller搭配@ResponseBody和@RequestMapping注解后,java对象会转换成json格式返回。 但实际上配...

dadaoke的专栏 6996

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由嵌套下keep-alive缓存失效的根本原因,并提供了三种实战解决方案。通过剖析组件树、router-view与keep-alive的协作机制,揭示了缓存无法穿透多层router-view的技术本质。文章对比了路由扁平化重构、状态管理配合路由守卫以及使用社区插件等方案的优缺点与适用场景,为开发者解决这一常见难题提供了清晰的选型指导。

weixin_29001423的博客 272

Cadence Virtuoso IC617:从零构建传输门与反相器的Schematic设计实战

本文详细介绍了使用Cadence Virtuoso IC617进行传输门与反相器Schematic设计的完整流程,包括环境准备、原理图绘制、Symbol创建、仿真验证及实用技巧。通过分步指导和实战经验分享,帮助初学者快速掌握集成电路设计基础,提升EDA工具应用能力。

weixin_29194693的博客 601

对象装xml中CDATA问题

前端时间做沃尔玛刊登的数据拼接时,遇到了对象转xml格式问题。 对象转xml是用以下方法:(将 < 换成 public String convertToXMLCDATA(Object o) { try { JAXBContext context = JAXBContext.newInstance(o.getClass());

ITDragon博客 4904

X书关键词协议搜索

【代码】X书关键词协议搜索。

Codeooo 博客 6378

JAXB处理XML与对象互转

本文主要讲解JAXB来处理对象与XML进行互转。 其中关于CDATA数据的处理参考:Jaxb如何优雅的处理CData这篇文章的实现,并略作改动。

请叫我猿叔叔的博客 1005

MFC中的CMFCToolBar:自定义按钮提示消息

通过以上步骤,您可以在MFC应用程序中使用CMFCToolBar创建自定义按钮,并设置按钮的提示消息。通过以上步骤,您可以在MFC应用程序中使用CMFCToolBar创建自定义按钮,并设置按钮的提示消息。通过上述代码,您可以在MFC应用程序中添加一个名为"ID_BUTTON_CUSTOM"的自定义按钮,并将其提示消息设置为"自定义提示消息"。通过上述代码,您可以在MFC应用程序中添加一个名为"ID_BUTTON_CUSTOM"的自定义按钮,并将其提示消息设置为"自定义提示消息"。

PixelInk的博客 1086

网格质量评价

CFD中评价网格质量的方法

B_etter_Man的博客 1万+

Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套

最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类xml如下为了看起来更加清晰我将这个xml转JSON 的放在下面由此我们发现企微回调的这个xml的层级比较复杂 那接下来我们将正式开始转Javabena对象###引入依赖。

juntaonb的博客 3399

Python 爬虫实战:爬取今日头条文章与阅读量数据

本文详细介绍了基于Python爬取今日头条文章与阅读量数据的完整方案。通过分析今日头条API接口,采用Requests+正则表达式技术实现数据抓取,重点解决加密参数构造、请求头模拟、反爬规避等核心问题。文章包含文章列表获取、详情数据提取、互动数据采集等完整流程,并提供数据存储与基础分析方法。同时强调合规使用爬虫技术,控制爬取频率,避免干扰平台运营。该方案可为内容传播分析、用户兴趣研究提供数据支持,但需注意接口参数更新和反爬机制变化,适时调整代码实现。

2503_91057718的博客 2520

使用jackson把java对象转成xml格式

一、maven依赖引入 <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.12.0</version> </dependency>

qq_20161461的博客 6299

STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)

单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍芯片唤醒驱动程序。 一、RxDutyCycle模式 在讲述本篇内容之前,我们先来看一下SX1268的一种模式RxDutyCycle,译为中文为接收占空比模式。其可使用SetRxDutyCycle命令进入RxDutyCycle模式,我们来看一下该命令的详细解释。 该命令具有2个参数,...

snmplink的博客 4068

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

告别DOM解析!用Hutool 5.8.6的XmlUtil,5分钟搞定JavaBean与XML互转

本文介绍了如何使用Hutool 5.8.6的XmlUtil工具类简化JavaBean与XML之间的转换,告别传统的DOM解析方式。通过简洁的API和注解支持,开发者可以快速实现XML与Java对象的互转,提升开发效率。文章还提供了实战示例和性能优化建议,帮助开发者更好地应用这一工具。

weixin_33690367的博客 349

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

XStream中设置编码、忽略没有关联属性和支持CDATA

一、设置编码 XStream中可以设置转换后的编码格式; XStream xStream = new XStream(new DomDriver(“GBK”)); 二、忽略没有关联的属性 “no such field”类似于这样的错误。 问题分析 我们在使用XStream对象时,一般都会直接new一个对象出来,例如 XStream xstream = new XStream(); 1 这样使用之后...

生命的意义在于创造和毁灭 3233

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

对象和xml之间的转化--XStream的使用

对象和xml之间的转化 在项目开发中有时候与其他第三方接口对接需要用到,参数和响应有时候会以xml的形式传递 需要导入的依赖是 pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream...

我吃包菜 1663

XML和注解(Annotation)

XML和注解Annotation

as15282235592的博客 2483

Java枚举、XML、注解

万维网联盟(W3C)万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。建立者: Tim Berners-Lee (蒂姆·伯纳斯·李)。是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)、可扩展标记语言XML(标准通用标记语言下的一个子集)

yqqの博客 241

告别DOM和JAXB!用Hutool的XmlUtil搞定XML读写,5分钟上手Java数据交换

本文介绍了如何使用Hutool的XmlUtil工具简化Java中的XML读写操作,告别复杂的DOM和JAXB API。通过对比传统方法与XmlUtil的代码量,展示了其高效性和易用性,包括XML与Java对象的快速转换、复杂结构处理及性能优化技巧,帮助开发者5分钟内掌握现代XML处理方案。

weixin_33671935的博客 439
上一篇: java String类中的intern方法
下一篇: java获取路径问题
java_trainee
博客等级 码龄10年 12粉丝 22原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值