FusioCharts使用手记(二)

   多亏了道长A的FusionCharts Free中文开发指南,让我少走了很多弯路。
   但是还是有一个难点,如何用优雅且高效的方法使用字符串将动态数据拼接成dataXml?(为啥不用dataUrl?——权衡后的选择)毕竟看着一个又一个的for循环,if判断语句,中间再夹杂着string符号和加号,怎么都觉得丑。觉得丑就会觉得有更好的选择。
 
   不错!是有更好的选择,此刻我至少想到了7种方法。这些方法根据采用的技术不同又分为三类。孰优孰劣,视情况而定:

   第一类:自己动手丰衣足食型。在要求的图形复杂度不是太高的情况下可以采用此种类型,一般都是single series charts。此类包括两种方法:
   1.一个方法搞定一切。只将需要的value,name等简单的封装,放入一个方法中,在这个方法中将大部分数据写死。
   
    public static StringBuilder genBar2DXml(String month, List results) {
        StringBuilder temp = new StringBuilder("");
        temp
                .append("<graph caption='"
                        + month
                        + " Sales' numberSuffix='%25' xAxisName= '省份' yAxisName= 'Units' showNames= '1' decimalPrecision='2' formatNumberScale='0' chartRightMargin='30'>  ");
        for (int i = 0; i < results.size(); i++) {
            String strs[] = (String[]) results.get(i);
            temp
                    .append("<set name='" + strs[0] + "' value='" + strs[1]
                            + "'/>");
        }
        temp.append("</graph>");
        return temp;
    }

   2.对fcf的xml文档进行分析,发现简单的图形只是graph和set的两级标签,稍复杂的图形有一级graph,二级 dataset,categories,三级set,category标签。可以为这些标签配置不同的生成方法。
public static StringBuilder genSet(List<String[]> results)
public static StringBuilder genGraph(GraphInfo graphInfo)
public static StringBuilder genDataset(String[] values, String seriesname, int mode)
public static StringBuilder genCategories(String[] names)

   这四个方法,基本可以解决稍微复杂的问题了。但是可能会有些繁琐,因为graph可能会需要较多的属性设置;同时,在需求可能会频繁改变的情况下,不能保证修改能及时跟上。(毕竟一个图形的属性太多了)

   第二类:拿来主义型。这个没有多说的,认真查阅英文文档,直接就用fcf的FusionChartsDOM.js来做,但这个的难点在于仍然需要自己拼接一部分内容,同时从数据库中读取数据再到网页中,数据始终处于一种不平稳的状态,一直到网页中才会生成最终采用的dataXml数据,这个不太好。

   第三类:疯狂的拿来主义型。既然前两种都感觉有缺陷,不优雅,那么我就在想,我是不是走错路了?学习java,一个关键就是学会取用,而不是钻研。图形生成的关键在于xml,我为什么非要自己来封装这个功能呢?我能不能找找看,是否有现成的东西可以用?找到了,至少有四种,四种用于解析生成xml文档的解决方案。对,这就是那四种方法:DOM, SAX, DOM4J, JDOM。
   稍微回顾一下步骤:首先从数据库中读取配置信息,装配成GraphConfig,然后根据GraphConfig中的信息生成GraphInfo,经过查询后,此时GraphInfo中已经信息完备了。然后再使用dom4j(个人比较喜欢)的xml生成方案,重写生成 graph,set,dataset,categories标签的方法,这样重写之后,代码果然更简洁了,而且,如果需求有变化,源于dom4j中xml 文档对象的树结构,代码也变得容易修改了。

   至此,这个dataxml的生成算解决了。

你可能感兴趣的:(数据结构,xml,Flash)