在寻找一个功能全面、文档齐备、交互性强、易于使用、配置灵活、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
分享到:
相关推荐
- 使用XStream时,为避免XML注入攻击,应配置XStream的安全模式,限制可接受的类和字段。 - 对于复杂的XML结构,XStream的类型别名和数据转换功能能简化代码。 7. **总结** XML解析和JavaBean与XML之间的转换是...
XStream是一个强大的库,它提供了将Java对象转换为XML,以及将XML转换回等效Java对象的功能。在这个场景中,"使用XStream多集合生成xml"是一个关键的技术点,它涉及到如何将多个集合类的对象转换成XML文档。以下是对...
此外,为了提高安全性,XStream提供了一种叫做"alias"的机制,可以将类名映射为更友好的XML标签。 总的来说,XStream是Java开发中处理XML序列化和反序列化的强大工具,其简单易用的API使得XML与Java对象之间的转换...
本项目提供了一个完整的Java工程示例,演示了如何使用XStream实现XML到POJO以及POJO到XML的双向转化,并包含了必要的jar包和测试类,可以直接运行。 XStream是JVM平台上的一个开源库,由XStream Software公司开发,...
XStream是一款强大的库,它使得Java对象能够轻松地转换为XML格式,反之亦然。本教程将深入探讨如何使用XStream进行Java类与XML文件之间的互转解析。 首先,我们需要引入XStream库。在Maven项目中,可以在pom.xml...
创建一个Java对象,然后使用Xstream的`toXML()`方法将其转换为XML字符串: ```java import com.thoughtworks.xstream.XStream; public class User { private String name; private int age; // 构造器、...
在这个版本中,XStream提供了对Java Bean对象转换为XML的全面支持。 **XStream的工作原理:** XStream的核心是基于反射的,它通过分析Java对象的类结构来构建XML表示。它使用了一种称为"alias"的概念,允许我们将...
Xstream通过使用注解提供了高度的灵活性,使得XML的生成和解析更加简单和直观。在这篇文章中,我们将深入探讨如何利用Xstream的注解来处理XML。 首先,要使用Xstream,我们需要在项目中引入其依赖。如果你使用的是...
4. **反序列化XML为Java对象** 反之,如果有一个XML字符串,你可以将其转换回Java对象: ```java Employee deserializedEmployee = (Employee) xstream.fromXML(xml); System.out.println(deserializedEmployee....
在默认情况下,XStream将Java对象的属性名称直接映射为XML元素的名称,而类的全名则成为XML的根元素名。但在实际应用中,我们往往需要更灵活的命名规则,这时就需要使用别名映射。XStream提供了多种配置别名的方式:...
XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...
这篇博客“使用XStream是实现XML与Java对象的转换(6)--持久化”深入探讨了如何利用XStream进行持久化操作,使得对象状态能够持久保存到磁盘,同时也能够从XML文档中恢复。 首先,我们需要理解XStream的核心概念。...
XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。XStream通过消除XML...
4. **对象转换为XML**:在`getXmlResponse()`方法中,创建一个User对象,然后使用XStream将其转换为XML字符串。 ```java User user = new User(); // 初始化user对象... String xmlResponse = xstream.toXML...
XStream是一个强大的Java库,它允许开发者方便地将Java对象序列化为XML,同时也能将XML数据反序列化回对应的Java对象。这个过程对于数据存储、网络传输或者XML配置文件的处理非常有用。在处理多个同名子节点以及节点...
在Java编程语言中,XStream库提供了一个简单且强大的机制,用于将Java对象序列化为XML,反之亦然。这使得在存储数据、传输数据或持久化对象时非常方便。本教程将深入探讨XStream库及其在Java中的使用,通过实际的...
XStream库提供了一个优雅的方式来将Java对象转换为XML,反之亦然,使得处理XML数据变得更加简单。本教程将深入探讨如何使用XStream进行XML操作。 一、XStream简介 XStream是一个开源库,由Johannes Link开发,它...
首先创建XStream实例,然后使用`toXML()`方法将Java对象转换为XML字符串: ```java XStream xstream = new XStream(); User user = new User(); user.setName("Forest"); user.setAge(30); String xml = xstream.to...
标题中的“XStream实现Object与XML转换解决方案”指的是一个Java库——XStream,它提供了一种简单的方法来序列化和反序列化Java对象到XML,反之亦然。这个库广泛用于将程序数据保存到XML文件或者从XML数据恢复对象,...