Delphi的FusionCharts XML对象结构是什么?

3
我一直在开发一个Web服务器,用于生成FusionCharts使用的XML数据。在尝试着用Delphi来标准化包装这些图表所需的XML生产对象结构数天后,我决定看看是否已经有人做过这件事。
我的目标是在Delphi中建立一个对象结构,用于包装生成FusionCharts XML数据所需的功能。有42种可能的图表类型,每种类型都需要略有不同的XML结构。我开始构建的对象结构简单地包装了指定这样一张图表的常见属性的能力,并基于这些属性生成即时的XML数据。当然,它还包括处理多个数据集,每个数据集用于图表中的不同系列。还有一些混合数据集的怪异图表,这正是我在尝试实现此结构时迷失方向的地方。
我很快意识到这是一个巨大的任务,并想知道是否已经有人完成了这样的工作。我知道有一个VCL库可以在应用程序中显示FusionCharts,但这并不是我需要的。我只需要简单地生成XML数据,以通过Web服务器传递回HTTP客户端。
这已经做过了吗?如果没有,那么如何完成这项任务的任何提示或指针?我正准备创建一个名为“TFusionChart”的单个对象,并将所有内容都封装在其中(带有“ChartType”属性),但有42种可能的图表,这将是一团糟。我还可以创建42个不同的对象,每个对象对应一种图表,但这将具有冗余代码。
更新:
为了解释我的现有结构,我有一个基本组件叫做“TFusionChart”。该类包含所有图表所共有的内容,包括类别名称、标题、背景等。没有任何实际的图表是基于这个类的。然后我有“TFusionChart2D”和“TFusionChart3D”。然后我有4个名为“TFusionChartSingle2D”、“TFusionChartMulti2D”、“TFusionChartSingle3D”和“TFusionChartMulti3D”的组件。从这些4个类开始,我就开始创建实际的图表组件。我计划为每个可用的图表类型都提供一个组件。
我面临的问题是如何管理要包含的数据。一些图表可以组合成一个,例如:多个系列在列中、一条线系列以及列内堆叠的数据。这一个图表就有非常独特的存储数据的方式,很难与其他类型的图表共享,例如一个简单的单系列列图表。

我尝试了下面回答中描述的XML数据绑定功能,但这种解决方案太过复杂,所以我放弃了。原因在于有42种类型的图表,每种图表都需要几千行代码。


6
可以请您解释一下为什么要关闭投票吗? - Jerry Dodge
您是指 Fusioncharts v3.2 吗? - menjaraz
2个回答

1

我建议您使用XML绑定来构建用于XML生成的类层次结构。

为此,您可以参考以下与Fusioncharts相关的XSD资源

如果您找到其他最新的XSD资源,请不要忘记分享。


编辑:

正如楼主所指出,使用XML绑定似乎是过度的,我建议采用以下替代方案:

  1. 剥离所有不必要的特性,得到裸XSD,仍然符合Fusioncharts规范并且符合楼主的要求。
  2. 使用适当的工具处理裸XSD以获得相应的XMI文件(例如企业架构师)。
  3. 将XMI文件提供给Case工具,开始真正的工作:为Fusioncharts XML生成设计轻量级类

XML绑定似乎是一个非常强大的工具,但是,在遵循一些不同的教程并且完全按照描述进行操作时,我遇到了一些错误“接口不支持”(这是另一个问题)。但还是谢谢! - Jerry Dodge
这个项目已经变得非常庞大,我决定不使用XML绑定,而是从头开始构建我的结构。原因很简单,42个单元每个都有数千行代码,这有点过度了。我甚至不需要每一个可能的功能,而且我还想把它做成一个组件。 - Jerry Dodge
至少2010年12月06日的XSD是否最新?但是,您可能仍需要处理成千上万行代码,以制作一个组件来处理42种可能的图表类型及其所涉及的复杂性。如果您熟悉XML / XSD,则可以尝试编写缩小版本的XSD(精简但仍符合规范),以摆脱所有臃肿的功能。 - menjaraz
严格来说,使用XML绑定的“每个图形数千行”的说法仍然扩展到整个XML后端中甚至更多的代码行(即DOM),而您甚至看不到。我正在进行的自定义不需要这些其他大型后端结构,这意味着实际过程中涉及的代码较少。 - Jerry Dodge
感谢您的编辑,虽然我已经重新考虑了一切,并决定只构建对象结构来包装我的系统所需的图表,而不是所有可用的各种图表。例如,TSalesSummaryChartTInventorySalesChartTSalesPersonChart等。 - Jerry Dodge

1
我会尝试为每种图表类型创建一个类,但使用基类将相似的图表放在一起。这个类只应该是图表数据和图表设置的“数据持有者”,并把XML输出的创建委托给一个单独的类。这样可以轻松地尝试并在不同的解决方案之间切换输出生成,或者插入其他输出格式。

事实上,我是这样开始的,首先是TFusionChart,然后是TFusionChart3DTFusionChart2D,然后是TFusionChartSingle2DTFusionChartMulti2D等等。然后我以这些为基础制作所有实际的图表。前3个不作为任何图表的基础。 - Jerry Dodge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接