XStream支持CDATA标签
来源:互联网 发布:淘宝买家秀木耳 编辑:程序博客网 时间:2024/05/17 01:53
需求:在生成XML文档中需要支持CDATA标签,而且不是所字段都需要增加,只需要某些特定的字段增加CDATA的标签。
研究:在网上找了一些相关资料,基本采用的方法都是重载XppDriver,做一个MyXppDriver类对XppDriver进行扩展,MyXppDriver中的作用,就是将要生成的xml文件的text进行字符转义,最后使用XStream xstream = new XStream(new MyXppDriver)来创建XStream对象,最终支持CDATA标签。
研究:在网上找了一些相关资料,基本采用的方法都是重载XppDriver,做一个MyXppDriver类对XppDriver进行扩展,MyXppDriver中的作用,就是将要生成的xml文件的text进行字符转义,最后使用XStream xstream = new XStream(new MyXppDriver)来创建XStream对象,最终支持CDATA标签。
思考:首先本人认为这样写这个类比较麻烦,现在我需要修改部份重载让那些要输出的text中,如果有"<![CDATA["开始和"]]>"结束的字段就不用进行任何特殊符号的转义,而某字段没有CDATA标签的起讫符号时,就依然使用原有的PrettyPrintWriter 的writerText方法输出,即将text中的特殊符号进行转义,如:引号(")会被转义为""",以此来确保输出的xml文件在读取时不会出错
package com.wechat.utils.xml;import java.io.Writer;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.core.util.QuickWriter;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;import com.thoughtworks.xstream.io.xml.XppDriver;public class XStreamUtil { private static String PREFIX_CDATA = "<![CDATA["; private static String SUFFIX_CDATA = "]]>"; /** * 全部转化 */ public static XStream initXStream() { return new XStream(new XppDriver() { @Override public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { protected void writeText(QuickWriter writer, String text) { // if (text.startsWith(PREFIX_CDATA) && // text.endsWith(SUFFIX_CDATA)) { writer.write(PREFIX_CDATA + text + SUFFIX_CDATA); // } else { // super.writeText(writer, text); // } } }; } }); } /** * 初始化XStream可支持某一字段可以加入CDATA标签,如果需要某一字段使用原文,就需要在String类型的text的头加上 * "<![CDATA["和结尾处加上"]]>"标签, 以供XStream输出时进行识别 * @param isAddCDATA 是否支持CDATA标签 */ public static XStream initXStream(boolean isAddCDATA) { XStream xstream = null; if (isAddCDATA) { xstream = new XStream(new XppDriver() { @Override public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { protected void writeText(QuickWriter writer, String text) { if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) { writer.write(text); } else { super.writeText(writer, text); } } }; } }); } else { xstream = new XStream(); } return xstream; }}
0 0
- XStream支持CDATA标签
- XStream支持CDATA标签
- XStream支持CDATA标签
- XStream支持CDATA标签
- 扩展xstream,使其支持CDATA块
- CDATA标签格式
- XStream双下划线问题解决与CDATA标记同时的方案
- XStream对所有xml节点转换时增加CDATA标记
- xstream 小结 一个标签下有多个同名标签
- mybatis中的CDATA标签的用法
- mybatis中的CDATA标签的用法
- mybatis中的CDATA标签的用法
- mybatis中的CDATA标签的用法
- mybatis中的CDATA标签的用法
- Mybatis中的CDATA标签的用法
- Mybatis中的CDATA标签的用法
- CDATA
- CDATA
- Android的Handler总结
- (十三)适配器模式
- Java抽象类与接口
- 常用第三方地图
- oracle删除大数据表整表后整理
- XStream支持CDATA标签
- eclipse.ini问题
- Android:interpolator用法
- solr4.9.0本地数据提交异常分析
- 2013蓝桥杯第39级台阶
- opencv error assertion failed,imread读到的总是空数据,Microsoft C++ 异常: 内存位置 0x0043f888 处的 cv::Exception。
- PB-数据窗口缓冲区与数据修改状态
- Android Studio ADB响应失败解决方法
- <float.h> 浮点限制 、<limits.h>整数限制