XStream支持CDATA标签

- 日理万妓 2022-07-12 23:22 372阅读 0赞

需求: 在生成XML文档中需要支持CDATA标签,而且不是所字段都需要增加,只需要某些特定的字段增加CDATA的标签。

研究: 在网上找了一些相关资料,基本采用的方法都是重载XppDriver,做一个MyXppDriver类对XppDriver进行扩展,MyXppDriver中的作用,就是将要生成的xml文件的text进行字符转义,最后使用XStream xstream = new XStream(new MyXppDriver)来创建XStream对象,最终支持CDATA标签。

思考:首先本人认为这样写这个类比较麻烦,现在我需要修改部份重载让那些要输出的text中,如果有”<![CDATA[“开始和”]]>”结束的字段就不用进行任何特殊符号的转义,而某字段没有CDATA标签的起讫符号时,就依然使用原有的PrettyPrintWriter 的writerText方法输出,即将text中的特殊符号进行转义,如:引号(“)会被转义为”&quot”,以此来确保输出的xml文件在读取时不会出错

[java] view plain copy

在CODE上查看代码片 派生到我的代码片

  1. package com.wechat.utils.xml;
  2. import java.io.Writer;
  3. import com.thoughtworks.xstream.XStream;
  4. import com.thoughtworks.xstream.core.util.QuickWriter;
  5. import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
  6. import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
  7. import com.thoughtworks.xstream.io.xml.XppDriver;
  8. public class XStreamUtil {
  9. private static String PREFIX_CDATA = “<![CDATA[“;
  10. private static String SUFFIX_CDATA = “]]>”;
  11. /**
  12. * 全部转化
  13. */
  14. public static XStream initXStream() {
  15. return new XStream(new XppDriver() {
  16. @Override
  17. public HierarchicalStreamWriter createWriter(Writer out) {
  18. return new PrettyPrintWriter(out) {
  19. protected void writeText(QuickWriter writer, String text) {
  20. // if (text.startsWith(PREFIX_CDATA) &&
  21. // text.endsWith(SUFFIX_CDATA)) {
  22. writer.write(PREFIX_CDATA + text + SUFFIX_CDATA);
  23. // } else {
  24. // super.writeText(writer, text);
  25. // }
  26. }
  27. };
  28. }
  29. });
  30. }
  31. /**
  32. * 初始化XStream可支持某一字段可以加入CDATA标签,如果需要某一字段使用原文,就需要在String类型的text的头加上
  33. * “<![CDATA[“和结尾处加上”]]>”标签, 以供XStream输出时进行识别
  34. * @param isAddCDATA 是否支持CDATA标签
  35. */
  36. public static XStream initXStream(boolean isAddCDATA) {
  37. XStream xstream = null;
  38. if (isAddCDATA) {
  39. xstream = new XStream(new XppDriver() {
  40. @Override
  41. public HierarchicalStreamWriter createWriter(Writer out) {
  42. return new PrettyPrintWriter(out) {
  43. protected void writeText(QuickWriter writer, String text) {
  44. if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) {
  45. writer.write(text);
  46. } else {
  47. super.writeText(writer, text);
  48. }
  49. }
  50. };
  51. }
  52. });
  53. } else {
  54. xstream = new XStream();
  55. }
  56. return xstream;
  57. }
  58. }

发表评论

表情:
评论列表 (有 0 条评论,372人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XStream支持CDATA标签

    需求: 在生成XML文档中需要支持CDATA标签,而且不是所字段都需要增加,只需要某些特定的字段增加CDATA的标签。  研究: 在网上找了一些相关资料,基本采用的方

    相关 XStream 简介

    XStream 一、概述 XStream是Java类库,用来将对象序列化成XML (JSON)或反序列化为对象。 也就是说,使用XStream,我们可以把Java