xml中“ < > ”转义为“ < > ”问题处理

曾经也碰到过类似问题,解决方法是在发送或者解析报文前执行上面的方法将内容转义一下,现在我用dom4j组装如下的报文(报文体中内容传输时加密处理),大致介绍一下上面方法的使用,具体看代码。

import java.io.StringReader;
import java.io.StringWriter;
import java.math.BigDecimal; import org.apache.commons.lang.StringEscapeUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import com.thoughtworks.xstream.core.util.Base64Encoder;
/**
* @ClassName: XmlEscapeTest
* @Description: dom4j组装xml报文测试,转义问题处理
* @author @zjf
* @date 2019年1月5日
*
*/
public class XmlEscapeTest { public static void main(String[] args) {
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("utf-8"); // 默认utf-8 Element rootElement = document.addElement("SERVICE");
rootElement.addAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
// 自定义组装报文头
Element headElement = rootElement.addElement("HEAD");
headElement.addElement("serviceversion").addText("1.3");
headElement.addElement("serviceid").addText("jy.dzptfpkj");
headElement.addElement("iszip").addText("N");
headElement.addElement("encryptcode").addText("0");
// 报文体自定义组装,内容加密
rootElement.addElement("BODY");
String bodyText = encodeBodyText();
rootElement.element("BODY").addText(bodyText); System.out.println("---------报文传输过程中可能出现的“ < > ”转义为“ < > ”--------------");
System.out.println(StringEscapeUtils.escapeXml(document.asXML()));
System.out.println("\n"+"******************分割线********************"+"\n"); // xml文件"< >"禁止转义,保留<>样式的方法 (无论是否存在转义问题,都在此处统一一下格式)
String xml = StringEscapeUtils.unescapeXml(document.asXML()); // 格式化输出
String xmlFormat = null;
try {
xmlFormat = format(xml);
} catch (Exception e) {
e.printStackTrace();
} System.out.println("------------格式化输出报文-----------------");
System.out.println(xmlFormat);
} /**
* @Title: encodeBodyText
* @Description: 自定义加密的报文体内容
* @return String
*/
public static String encodeBodyText() {
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("utf-8"); // 默认utf-8
Element detailElement = document.addElement("DETAIL");
detailElement.addElement("name").addText("小刚");
detailElement.addElement("age").addText("25");
detailElement.addElement("money").addText(new BigDecimal("152.220").toPlainString());
String detailXml = document.getRootElement().asXML();
// 加密内容
Base64Encoder encoder = new Base64Encoder();
String comment = encoder.encode(detailXml.getBytes());
return comment;
} /**
* @Title: format
* @Description: 格式化输出xml字符串
* @param str
* @return String
* @throws Exception
*/
public static String format(String str) throws Exception {
SAXReader reader = new SAXReader();
// 创建一个串的字符输入流
StringReader in = new StringReader(str);
Document doc = reader.read(in);
// 创建输出格式
OutputFormat formater = OutputFormat.createPrettyPrint();
// 设置xml的输出编码
formater.setEncoding("utf-8");
// 创建输出(目标)
StringWriter out = new StringWriter();
// 创建输出流
XMLWriter writer = new XMLWriter(out, formater);
// 输出格式化的串到目标中,执行后。格式化后的串保存在out中。
writer.write(doc);
writer.close();
// 返回格式化后的结果
return out.toString();
} }
输出如下:

xml中“ < > ”转义为“ < > ”问题处理的更多相关文章
- mapper.xml中转义
1.用转义字符转义 XML转义字符 < < 小于号 > > 大于号 & & 和 ' ’ 单引号 " " 双引号 <i ...
- java转义xml中的多余尖括号
xml中的敏感字符是尖括号,如果xml的值中含有尖括号,那么在解析的时候就会报错,如: <?xml version="1.0" encoding="UTF-8&qu ...
- [转]XML中必须进行转义的字符
转自:http://jaenson.iteye.com/blog/945469 编写XML代码经常遗漏的常识: XML实体中不允许出现"&","<" ...
- (转载)ANDROID STRINGS.XML 中的特殊字符转义
今天项目碰到个转义特殊字符的问题,网上搜索看到,故转载,已标明出处: 项目中要在string.xml 中显示特殊符号.如@号冒号等.直接写肯定不行啦 只能考虑使用ASCII码进行显示.在XML中空格符 ...
- (转)XML中必须进行转义的字符
场景:在工作中接触到很多xml文件,为了更好的操作这些文件,所有很有必要熟知xml文件的相关语义. 1 引入 编写XML代码经常遗漏的常识: XML实体中不允许出现"&", ...
- XML中需要转义的字符
有的数据库表的字段名,对于某些数据库来讲,是属于关键字或者保留字来处理识别的,那么这个时候,需要对这样的字段名进行转义处理,一般在执行sql 语句脚本的情况,处理办法是在这个字段名外加上双引号就可以识 ...
- Mybatis中的XML中需要用到的转义符号整理
使用这么久的Mybatis中需要转义的符号整理一下,小结一下: 1. < 小于符号 < 2. <= 小于等于 ...
- XML中不能识别&符号, 需要转义吗?
“&”在XML中是具有特殊含义的,是转义字符的前缀,如果要想用这个字符就需要转义.遇到“&”就替换成“&”就好了; xml所有转义符 和 & & 大于 ...
- xml中数据存储 <![CDATA[ … ]]>
在xml中 有些可能是 转义的字符 比如像<等 &符号, 你没发现 在加参数后面要进行转义 写成: 可以是& 但是每处都要 这么写. 在未来不可控的 ...
随机推荐
- DLL文件实现窗体的模板模式
机房合作版中第一次使用了模板方法,实现了类似窗体的界面和代码的复用..窗体继承有两种方法,一种是通过继承选择器从已编译的程序集合里选择,另一种则是通过DLL文件的方式继承.个人觉得DLL还是比较方便的 ...
- Unhandled Exception: System.BadImageFormatException: Could not load file or assembly (2008R2配置x64website)
.NET Error Message: Unhandled Exception: System.BadImageFormatException: Could not load file or asse ...
- [leetcode]Pow(x, n) @ Python
原题地址:https://oj.leetcode.com/problems/powx-n/ 题意:Implement pow(x, n). 解题思路:求幂函数的实现.使用递归,类似于二分的思路,解法来 ...
- 25个可遇不可求的jQuery插件
随着jQuery插件在网站建设过程中的使用率不断的增加,所以有必要跟进时代步伐开发出一些新的插件/代码片段,以此来巩固并提高前端用户体验,将用户体验提升到一个新的高度. 接下来所推荐的这些插件中有滑块 ...
- OpenFeign封装为springboot starter
OpenFeign是什么 随着业务的增多,我们的单体应用越来越复杂,单机已经难以满足性能的需求,这时候出现了分布式.分布式通讯除了RPC, REST HTTP请求是最简单的一种方式.OpenFeign ...
- 【Scala】Scala多线程-并发实践
Scala多线程-并发实践 scala extends Thread_百度搜索 scala多线程 - 且穷且独立 - 博客园 Scala和并发编程 - Andy Tech Talk - ITeye博客 ...
- 如何配置官方peerDroid,使其运行起来
一.Peer Droid是JXME协议到android平台的移植,开发者可以利用它来实现android设备以及传统PC机通讯的应用程序,peerDroid的官方demo主要是实现PC端peer和and ...
- xshell5不能用
转载:xshell 5 不能用 https://51.ruyo.net/10002.html
- C#.NET常见问题(FAQ)-如何使用2D绘图控件ZedGraph绘制坐标轴和坐标曲线
添加数据:示例添加了一条sin曲线和一条cos曲线,注意cos曲线比sin曲线点更密集(可以用这种方式控制点的采样疏密程度) 默认显示效果如下图所示,可以框选一个部分看放大效果 右击某个点可以 ...
- Linux网络编程:基于UDP的程序开发回顾篇
基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了 ...