扩展xstream,使其支持CDATA块
来源:互联网 发布:安卓 ping软件 编辑:程序博客网 时间:2024/05/16 20:30
在腾讯微信开发中,用XStream把java对象转成xml格式的文件,为满足腾讯微博的xml格式对XStream 做了一些扩展
使其支持CDATA,数字和浮点数不加CDATA,xml属性首字母大写
/**
* 扩展xstream,使其支持CDATA块*/
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对那些xml节点的转换增加CDATA标记 true增加 false反之
boolean cdata = false;
@SuppressWarnings("unchecked")
public void startNode(String name, Class clazz) {
if(!name.equals("xml")){
char[] arr = name.toCharArray();
if (arr[0] >= 'a' && arr[0] <= 'z') {
//arr[0] -= 'a' - 'A';
//ASCII码,大写字母和小写字符之间数值上差32
arr[0] = (char) ((int) arr[0] - 32);
}
name = new String(arr);
}
super.startNode(name, clazz);
}
@Override
public void setValue(String text) {
if(text!=null && !"".equals(text)){
//浮点型判断
Pattern patternInt = Pattern.compile("[0-9]*(\\.?)[0-9]*");
//整型判断
Pattern patternFloat = Pattern.compile("[0-9]+");
//如果是整数或浮点数 就不要加[CDATA[]了
if(patternInt.matcher(text).matches() || patternFloat.matcher(text).matches()){
cdata = false;
}else{
cdata = true;
}
}
super.setValue(text);
}
protected void writeText(QuickWriter writer, String text) {
/* if (cdata) {
text = "<![CDATA["+text+"]]>";
}
super.writeText(writer, text);*/
if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
/**
* 文本消息对象转换成xml
*
* @param textMessage 文本消息对象
* @return xml
*/
public static String textMessageToXml(TextMessage textMessage) {
xstream.alias("xml", textMessage.getClass());
return xstream.toXML(textMessage);
}
测试
public void testTextMessageToXml(){
TextMessage textMessage =new TextMessage();
textMessage.setToUserName("toUserName");
textMessage.setFromUserName("fromUserName");
textMessage.setContent("我的测试");
textMessage.setCreateTime(1348831860);
textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
textMessage.setFuncFlag(0);
String xml = MessageUtil.textMessageToXml(textMessage);
System.out.println(xml);
}
结果:
<xml>
<ToUserName><![CDATA[toUserName]]></ToUserName>
<FromUserName><![CDATA[fromUserName]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<FuncFlag>0</FuncFlag>
<Content><![CDATA[我的测试]]></Content>
</xml>
- 扩展xstream,使其支持CDATA块
- XStream支持CDATA标签
- XStream支持CDATA标签
- XStream支持CDATA标签
- XStream支持CDATA标签
- Django中扩展TinyMCE使其支持图片上传功能
- 扩展cxLookupComboBox,使其支持多列查询的cxLookupComboBoxEx
- 扩展DailyRollingFileAppender使其支持限定日志文件的数量
- NETSH 如何扩展其功能?如何适配netsh使其支持SCTP协议?
- 扩展Fckeditor2.6.4中标签使其支持把标签体的内容作为编辑器默认值
- 扩展Bootstrap-table插件使其支持通过下拉框快速跳转至任意页数
- XStream双下划线问题解决与CDATA标记同时的方案
- XStream对所有xml节点转换时增加CDATA标记
- C# 序列化中的 CDATA块
- 扩展FCKeditor,使其具有分页功能
- 扩展NSLog使其更方便阅读
- 扩展NSLog使其更方便阅读
- 重载copyProperties,使其支持Map类型
- XML解析详细介绍
- NSDateFormatter使用总结
- 游标的创建以及详解.
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
- Dalvik虚拟机JNI方法的注册过程分析
- 扩展xstream,使其支持CDATA块
- C++中的单例模式
- 关于C++中的const的简单反汇编分析
- Jenkins 安装Address already in use问题
- JavaSE基础学习笔记-接口和多态
- Android点击链接启动应用
- OJDBC版本区别
- IntelliJ IDEA-代码编译不过
- android 4.4安全更新