在寻找一个功能全面、文档齐备、交互性强、易于使用、配置灵活、bug较少还FOR FREE
的图表组件失败之后,老板终于拍板买下fusioncharts的Enterprise Edition。
有些童鞋可能用过这个组件,它是一个用actionscript写的flash chart widget,在浏览器的flash player中播放。其数据和样式都由XML来定义。项目组用fusioncharts也有一段时间了。围绕着其XML格式的数据源提供方案,先后尝试了手工拼装、XSL转换等几种方式,感觉都不太理想。直到一个偶然的机会,我接触到xstream。
根据官方文档对xstream的介绍,XStream is a simple library to serialize objects to XML and back again。我硬译了一下,XStream是一个将java对象和XML相互转化的简单类库。恩,最吸引我的就是简单,400多k的身材、无任何依赖库、API清晰明了。顺带一提,本教程只用到编码功能,也就是java对象 to XML文档。
让我们开始吧
首先下载附件中的压缩包,解压后用eclipse打开它(File - Import - General - Existing Projects into WorkSpace),目录结构在Project Explorer视图中应该是这样滴:
选中项目节点按Run as...按钮,选择Run on server(tomcat的配置问题我就不说了),运行结果如图:
可以看到这是一个双轴复合图表,所需的数据共有三组,其中两个是bar、一个是line。数据和样式的定义也不是本文讨论的范围,让我们看一下最终要传给fusioncharts的XML:
<chart numberSuffix="万" palette="3" lineThickness="5" showValues="0"
labelDisplay="Rotate" slantLabels="1" areaOverColumns="0"
useRoundEdges="1">
<categories>
<category label="2009-09-01" />
<category label="2009-09-02" />
<category label="2009-09-03" />
</categories>
<dataset seriesName="下载次数(万)" color="0372AB" showValue="0"
lineThickness="2" yaxismaxvalue="100" anchorSides="10" anchorRadius="3"
anchorAlpha="100" parentYAxis="P">
<set value="9.3519" />
<set value="6.9093" />
<set value="7.8966" />
</dataset>
<dataset seriesName="费用(万)" color="8EAC41" showValue="0"
yaxismaxvalue="100" anchorSides="10" anchorRadius="3" anchorAlpha="100"
parentYAxis="P">
<set value="14.65065" />
<set value="11.44305" />
<set value="12.32055" />
</dataset>
<dataset seriesName="全省KPI完成度(%)" color="FFB200" showValue="0"
yaxismaxvalue="100" anchorAlpha="100" parentYAxis="S">
<set value="16.4487" />
<set value="23.6581" />
<set value="96.8973" />
</dataset>
</chart>
下面要做的事可以分为4步:1、建立一个Chart对象,其中包含XML中的所有信息。2、用xstream类库设置XML的格式。3、将Chart对象转化为XML文档。4、扫尾工作。
建立Chart对象
比照着XML文档在vo包下面建立好Chart、Category、Dataset和Set四个对象,私有属性加上setter/getter,这个大家都熟。
然后在dao.DataProvider类的createChart方法中按照XML文档中的数据初始化这个Chart,我这里都是硬编码,大家可以根据需要从datasource里面取。
设置XML的格式
如果哪位跳过这一步直接进入步骤3,他一定会很失望的看到这样的XML:
<vo.Chart>
...
</vo.Chart>
这是因为没有设置格式,教程里用到了3个相关的API:一是alias方法,用来为xml元素设置别名,这样<vo.Chart>就变成<chart>了;二是useAttributeFor方法,用来将子元素变为属性,例如<chart seriesName="xxx">;三是addImplicitCollection方法,让xstream不要显示Java Collection(教程里是List)的根元素。我只是蜻蜓点水的一带而过,欲知详情,一是参阅Xstream官方教程
、二是将DataProvider类chart2XML方法中对应的API注释掉对比一下。
Chart to XML
调用toXML这个API即可,返回一个String类型的字符串。
扫尾工作
将toXML返回的String传给fusioncharts后,我惊异的发现页面上一片空白。这里有两个暗雷需要扫除:一是要将XML中所有的双引号替换为单引号,这是因为index.jsp中18行setDataXML的参数就是一个字符串;二是要将XML中元素之间的空格去掉(这个bug我找了很久,怪异的fusioncharts)。用Matcher的replaceAll搞定它们。
- 大小: 13 KB
- 大小: 37.1 KB
分享到:
相关推荐
一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换
里面有位前辈的代码,是从外部读取xml的
使用xstream解析xml,xml与pojo的双向转化,完整的java 工程 带jar包和测试类,可以直接跑
xStream完美转换XML、JSON,包括XML转换成对象,以及对象转换成XML,以及对象转换成JSON,以及注意事项
Xstream生产xml和解析xml
用Xstream生成和解析xml
使用xstream进行java类与xml文件互转解析
XStream:Object与Xml字符串 互相转换 多个同名子节点以及节点属性的处理
webService接口对接时,需要传递一个xml内容。用xStream拼接xml
xStream xml to bean,使用xStream 互转 xml 、bean. 的一个工具类。
xstream方式解析及生成xml文件
在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,XStream支持指定别名。XStream支持以方法调用的方式,或是Java 标注的方式指定别名。 ...
Java对象转换成XML字符串 将List集合转换成xml文档 Map集合转换xml文档 用InputStream将XML文档转换成java对象
xstream-1.4.9实现xml与对象互转,不会用可以找dddddddddddddddddd
xstream 1.3.1.jar bean对象转换为xml
XStream XML解析 含样例及详细嵌入文档
XStream解析xml demo
XStream是以个实现序列化数据和xml之间相互转换的类库,使用非常简单、方便