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

摘要:
曾经也碰到过类似问题,解决方法是在发送或者解析报文前执行上面的方法将内容转义一下,现在我用dom4j组装如下的报文,大致介绍一下上面方法的使用,具体看代码。格式化后的串保存在out中。writer.write;writer.close();//返回格式化后的结果returnout.toString();}}输出如下:

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

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

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

importjava.io.StringReader;
importjava.io.StringWriter;
importjava.math.BigDecimal;
importorg.apache.commons.lang.StringEscapeUtils;
importorg.dom4j.Document;
importorg.dom4j.DocumentHelper;
importorg.dom4j.Element;
importorg.dom4j.io.OutputFormat;
importorg.dom4j.io.SAXReader;
importorg.dom4j.io.XMLWriter;
importcom.thoughtworks.xstream.core.util.Base64Encoder;
/**
 * @ClassName: XmlEscapeTest
 * @Description: dom4j组装xml报文测试,转义问题处理
 * @author@zjf
 * @date 2019年1月5日
 *
 */
public classXmlEscapeTest {
    public static voidmain(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("---------报文传输过程中可能出现的“ < > ”转义为“ &lt; &gt; ”--------------");
        System.out.println(StringEscapeUtils.escapeXml(document.asXML()));
        System.out.println("
"+"******************分割线********************"+"
");
        //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: 自定义加密的报文体内容 
     * @returnString
     */
    public staticString 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 = newBase64Encoder();
        String comment =encoder.encode(detailXml.getBytes());
        returncomment;
    }
    /**
     * @Title: format 
     * @Description: 格式化输出xml字符串 
     * @paramstr
     * @returnString
     * @throwsException 
     */
    public static String format(String str) throwsException {
        SAXReader reader = newSAXReader();
        //创建一个串的字符输入流
        StringReader in = newStringReader(str);
        Document doc =reader.read(in);
        //创建输出格式
        OutputFormat formater =OutputFormat.createPrettyPrint();
        //设置xml的输出编码
        formater.setEncoding("utf-8");
        //创建输出(目标)
        StringWriter out = newStringWriter();
        //创建输出流
        XMLWriter writer = newXMLWriter(out, formater);
        //输出格式化的串到目标中,执行后。格式化后的串保存在out中。
writer.write(doc);
        writer.close();
        //返回格式化后的结果
        returnout.toString();
    }
}

输出如下:

xml中“ &lt; &gt; ”转义为“ &amp;lt; &amp;gt; ”问题处理第3张

免责声明:文章转载自《xml中“ &amp;lt; &amp;gt; ”转义为“ &amp;amp;lt; &amp;amp;gt; ”问题处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于servu公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法使用gpg来加密数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++篇实现MD5算法

1、头文件 #ifndef MD5_H  #define MD5_H  #include <string>  #include <fstream>  /* Type define */  typedef unsigned char byte;  typedef unsigned int uint32;  using std::st...

java与json互相转换(解决日期问题)

JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文主要讲解下java和JSON之间的转换,特别是解决互相转换遇到日期问题的情况。 一、需要相关的jar包: json-lib-xxx.jar ezmorph-xxx.jar c...

Kubernetes (yaml 文件详解)

# yaml格式的pod定义文件完整内容:apiVersion: v1       #必选,版本号,例如v1kind: Pod       #必选,Podmetadata:       #必选,元数据  name: string       #必选,Pod名称  namespace: string    #必选,Pod所属的命名空间  labels:   ...

Eclipse paho学习笔记

Eclipse Paho java 支持java和android 两个客户端异步和同步, MqttAsyncClient,MqttClient 其中 后者是前者的包装同步器,特效除了5.0都支持 有两个版本可以相互替换 <dependency> <groupId>org.eclipse.paho</...

c# SQLHelper总汇

/// <summary> ///The SqlHelper class is intended to encapsulate high performance, ///scalable best practices for common uses of SqlClient. /// </summary>...

JAVA 调用HTTP接口POST或GET实现方式(转)

HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。 具体POST或GET实现代码如下: packagecom.yoodb.util; importjava.io.ByteArrayOutputStre...