xml-XStream关于添加CDATA,特殊字符问题

2023-12-10 01:08

本文主要是介绍xml-XStream关于添加CDATA,特殊字符问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近遇到一个需求就是要在xml中添加特殊字符,其实很简单

<ccontent><![CDATA[本保单行驶证车主为&<詹姆斯/科比>]]></ccontent>  

但是大部分系统用的都是自动转换工具,我们系统使用的是XStream,这个工具有个缺点就是不能修改数据,因此需要在类中
添加<![CDATA[********]]标签。

流程:

  • 1.数据是从后端另一个xml解析出来,发送给前端展示
  • 2.前端展示用户操作之后,前端再返回后端
  • 3.后端接收数据,发送给相应接口

遇到的问题:

首先后端xml的数据格式是这样的

<agreement> <ccode>C056</ccode>  <ccontent><![CDATA[本保单行驶证车主为&<詹姆斯/科比>]]></ccontent>  <coverage>0332,0334,0360,0361,0335</coverage>  <requiredF>1</requiredF>  <checkF>1</checkF>  <corrigibleF>1</corrigibleF>  <ruleName>山东_C056_测试特殊符号特约_20191112</ruleName>  <describe><![CDATA[请核实"C056_测试特殊符号特约"]]></describe>  <flowDirection>2</flowDirection> </agreement>  

解析xml,转换成obj,返给前端

前端展示数据,并将特殊字符进行转码,例如“<”对应 &lt ; 等等,但是前端展示数据不存在问题,可是传到后端数据就转码了

&lt ;![CDATA[本保单行驶证车主为&&lt ;詹姆斯/科比&gt ;]]&gt ;

后端接收数据存在问题,为了解决这个问题,使用StringEscapeUtils.unescapeHtml4()方法,不转义html字符

对象方法赋值上:
后端数据赋值代码主动添加CDATA标签

wsos.setC_content("<![CDATA["+js.getString("ccontent")+"]]>");

需要重写XStream方法:
注销原先的:

//XStream xStream = new XStream(new DomDriver(null,new XmlFriendlyNameCoder("_-", "_")));

新的方法:

final NameCoder nameCoder = new NoNameCoder();
XStream xStream = new XStream(new XppDomDriver(nameCoder) {@Overridepublic HierarchicalStreamWriter createWriter(Writer out) {return new PrettyPrintWriter(out,nameCoder) {protected void writeText(QuickWriter writer, String text) {if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) {writer.write(StringEscapeUtils.unescapeHtml4(text));} else {super.writeText(writer, text);}}};}});

此处NameCoder的作用是防止XStream转换xml时候出现element属性标签双下划线问题。

这篇关于xml-XStream关于添加CDATA,特殊字符问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475621

相关文章

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

解决java.util.RandomAccessSubList cannot be cast to java.util.ArrayList错误的问题

《解决java.util.RandomAccessSubListcannotbecasttojava.util.ArrayList错误的问题》当你尝试将RandomAccessSubList... 目录Java.util.RandomAccessSubList cannot be cast to java.

Apache服务器IP自动跳转域名的问题及解决方案

《Apache服务器IP自动跳转域名的问题及解决方案》本教程将详细介绍如何通过Apache虚拟主机配置实现这一功能,并解决常见问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录​​问题背景​​解决方案​​方法 1:修改 httpd-vhosts.conf(推荐)​​步骤

java反序列化serialVersionUID不一致问题及解决

《java反序列化serialVersionUID不一致问题及解决》文章主要讨论了在Java中序列化和反序列化过程中遇到的问题,特别是当实体类的`serialVersionUID`发生变化或未设置时,... 目录前言一、序列化、反序列化二、解决方法总结前言serialVersionUID变化后,反序列化失