`
vearn
  • 浏览: 58855 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Xstream为FusionCharts提供XML

阅读更多

在寻找一个功能全面、文档齐备、交互性强、易于使用、配置灵活、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
4
0
分享到:
评论

相关推荐

    xml解析及使用XStream实现javaBean与xml之间的转换

    - 使用XStream时,为避免XML注入攻击,应配置XStream的安全模式,限制可接受的类和字段。 - 对于复杂的XML结构,XStream的类型别名和数据转换功能能简化代码。 7. **总结** XML解析和JavaBean与XML之间的转换是...

    使用XStream 多集合生成xml

    XStream是一个强大的库,它提供了将Java对象转换为XML,以及将XML转换回等效Java对象的功能。在这个场景中,"使用XStream多集合生成xml"是一个关键的技术点,它涉及到如何将多个集合类的对象转换成XML文档。以下是对...

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    此外,为了提高安全性,XStream提供了一种叫做"alias"的机制,可以将类名映射为更友好的XML标签。 总的来说,XStream是Java开发中处理XML序列化和反序列化的强大工具,其简单易用的API使得XML与Java对象之间的转换...

    使用xstream解析xml,xml与pojo的双向转化,完整的java 工程

    本项目提供了一个完整的Java工程示例,演示了如何使用XStream实现XML到POJO以及POJO到XML的双向转化,并包含了必要的jar包和测试类,可以直接运行。 XStream是JVM平台上的一个开源库,由XStream Software公司开发,...

    使用xstream进行java类与xml文件互转解析--代码

    XStream是一款强大的库,它使得Java对象能够轻松地转换为XML格式,反之亦然。本教程将深入探讨如何使用XStream进行Java类与XML文件之间的互转解析。 首先,我们需要引入XStream库。在Maven项目中,可以在pom.xml...

    Xstream生成和解析xml.rar

    创建一个Java对象,然后使用Xstream的`toXML()`方法将其转换为XML字符串: ```java import com.thoughtworks.xstream.XStream; public class User { private String name; private int age; // 构造器、...

    xstream 1.3.1.jar bean对象转换为xml

    在这个版本中,XStream提供了对Java Bean对象转换为XML的全面支持。 **XStream的工作原理:** XStream的核心是基于反射的,它通过分析Java对象的类结构来构建XML表示。它使用了一种称为"alias"的概念,允许我们将...

    java 利用Xstream注解生成和解析xml

    Xstream通过使用注解提供了高度的灵活性,使得XML的生成和解析更加简单和直观。在这篇文章中,我们将深入探讨如何利用Xstream的注解来处理XML。 首先,要使用Xstream,我们需要在项目中引入其依赖。如果你使用的是...

    Java用xStream拼接xml

    4. **反序列化XML为Java对象** 反之,如果有一个XML字符串,你可以将其转换回Java对象: ```java Employee deserializedEmployee = (Employee) xstream.fromXML(xml); System.out.println(deserializedEmployee....

    Xstream生产xml和解析xml

    在默认情况下,XStream将Java对象的属性名称直接映射为XML元素的名称,而类的全名则成为XML的根元素名。但在实际应用中,我们往往需要更灵活的命名规则,这时就需要使用别名映射。XStream提供了多种配置别名的方式:...

    XStream在JavaBean与XML/JSON 之间相互转换

    XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...

    使用XStream是实现XML与Java对象的转换(6)--持久化

    这篇博客“使用XStream是实现XML与Java对象的转换(6)--持久化”深入探讨了如何利用XStream进行持久化操作,使得对象状态能够持久保存到磁盘,同时也能够从XML文档中恢复。 首先,我们需要理解XStream的核心概念。...

    XStream XML解析

    XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。XStream通过消除XML...

    springMVC整合xStream实现对象和xml转换

    4. **对象转换为XML**:在`getXmlResponse()`方法中,创建一个User对象,然后使用XStream将其转换为XML字符串。 ```java User user = new User(); // 初始化user对象... String xmlResponse = xstream.toXML...

    XStream:Object与Xml字符串 互相转换

    XStream是一个强大的Java库,它允许开发者方便地将Java对象序列化为XML,同时也能将XML数据反序列化回对应的Java对象。这个过程对于数据存储、网络传输或者XML配置文件的处理非常有用。在处理多个同名子节点以及节点...

    xstream对象与xml转换

    在Java编程语言中,XStream库提供了一个简单且强大的机制,用于将Java对象序列化为XML,反之亦然。这使得在存储数据、传输数据或持久化对象时非常方便。本教程将深入探讨XStream库及其在Java中的使用,通过实际的...

    使用XStream操作xml教程

    XStream库提供了一个优雅的方式来将Java对象转换为XML,反之亦然,使得处理XML数据变得更加简单。本教程将深入探讨如何使用XStream进行XML操作。 一、XStream简介 XStream是一个开源库,由Johannes Link开发,它...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    首先创建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转换解决方案

    标题中的“XStream实现Object与XML转换解决方案”指的是一个Java库——XStream,它提供了一种简单的方法来序列化和反序列化Java对象到XML,反之亦然。这个库广泛用于将程序数据保存到XML文件或者从XML数据恢复对象,...

Global site tag (gtag.js) - Google Analytics