TeeChart Pro VCL/FMX教程之XML导出和导入

    TeeChart Pro VCL/FMX是一款主流的图表制作工具。提供了数百种用于可视化的2D、3D图形样式、56种数学、统计和金融函数,以及不限数量的坐标轴和30种调色板组件。TeeChart Pro VCL/FMX教程将会以连载的形式持续为大家带来TeeChart Pro VCL/FMX的使用方法。 

点击下载TeeChart Pro VCL/FMX最新试用版


    本篇教程为大家带来的是TeeChart Pro VCL/FMX中XML导出和导入这一节,在TeeChart版本5及更高版本中,支持图表系列数据的XML输出;版本6及更高版本支持XML格式的数据输入。

    本教程显示了有关以XML格式导出和导入图表数据的详细说明。

导出

    使用图表导出对话框,可以在设计时或运行时轻松地将图表数据导出为XML格式:

TeeChart导出对话框,数据选项卡。

    在此对话框中,您可以选择要导出的系列(或导出所有系列),以及是否要导出点索引(0,1,2 ...等),点文本(标签)或颜色。复制按钮将会生成XML文本并将其复制到Windows或Linux剪贴板;保存按钮创建一个新的XML文件。

    例如,可以使用Internet Explorer打开XML文件。

包含单个系列的示例XML文件

<series title="Series1" type="Line" color="#0080FF">
<points count="7">
<point Y="840"/>
<point Y="865"/>
<point Y="755"/>
<point Y="735"/>
<point Y="730"/>
<point Y="851"/>
<point Y="732"/>
</points>
</series>

    导出多个系列时,XML格式有点不同:

包含单个系列的示例XML文件

<chart>

<series title="Series1" type="Line" color="#FF0000">

<points count="8">

<point Y="45"/>

<point Y="126"/>

<point Y="128"/>

<point Y="237"/>

<point Y="153"/>

<point Y="135"/>

<point Y="259"/>

<point Y="273"/>

</points>

</series>

<series title="Series2" type="Line" color="#008000">

<points count="8">

<point Y="173"/>

<point Y="191"/>

<point Y="191"/>

<point Y="204"/>

<point Y="180"/>

<point Y="187"/>

<point Y="209"/>

<point Y="182"/>

</points>

</series>

<series title="Series3" type="Line" color="#FFFF00">

<points count="8">

<point Y="250"/>

<point Y="242"/>

<point Y="221"/>

<point Y="195"/>

<point Y="175"/>

<point Y="188"/>

<point Y="196"/>

<point Y="193"/>

</points>

</series>

</chart>

按代码导出

    TeeChart提供了一个以XML格式导出系列数据的类,该类位于TeeStore.pas单元中,其名称为TSeriesDataXML。

保存到文件的示例:

Uses TeeStore;

with TSeriesDataXML.Create(Chart1, Series1) do
try
  SaveToFile('c:\sample.xml');
finally
  Free;
end;

 如果要导出Chart1中的所有系列,需要传递nil而不是在Create构造函数的最后一个参数中传递Series1。

该类还提供了将XML输出转换为字符串的函数:

var S : String;
with TSeriesDataXML.Create(Chart1, Series1) do
try
  S:=AsString;
finally
  Free;
end;

如果是有几个属性控制要导出的数据类型,例如是否包含点颜色:

with TSeriesDataXML.Create(Chart1, Series1) do
try  IncludeColors:=True;
  SaveToFile('c:\sample.xml');
finally
  Free;
end;

    到目前为止,我们已经看到如何生成包含TeeChart系列点的XML数据。接下来就是将这个XML导入图表。

导入XML数据

    TeeChart Pro包含一个自动加载XML数据的组件,该组件位于TeeXML.pas单元,类名称为TTeeXMLSource。Delphi工具栏中的TeeXMLSource组件

    加载XML图表所需的最小属性是Chart和FileName。Chart属性指示添加XML数据的位置(哪个Chart);FileName属性也可以是Web地址(URL);Load方法启动将XML数据加载到图表系列中。

让我们创建一个新的应用程序并删除Chart1组件和TeeXMLSource1组件。

uses Series;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterTeeStandardSeries; // make sure "Line" style is loaded.

  TeeXMLSource1.Chart:=Chart1;
  TeeXMLSource1.FileName:='http://www.steema.com/support/teechart/6/tutorials/xml/TeeChartSampleManySeries.xml';
  TeeXMLSource1.Load;
end;

http://www.steema.com/support/teechart/6/tutorials/xml/TeeChartSampleManySeries.xml:

<chart>
<series title="Series1" type="Line" color="#FF0000">
<points count="8">
<point Y="45"/>
<point Y="126"/>
<point Y="128"/>
<point Y="237"/>
<point Y="153"/>
<point Y="135"/>
<point Y="259"/>
<point Y="273"/>
</points>
</series>
<series title="Series2" type="Line" color="#008000">
<points count="8">
<point Y="173"/>
<point Y="191"/>
<point Y="191"/>
<point Y="204"/>
<point Y="180"/>
<point Y="187"/>
<point Y="209"/>
<point Y="182"/>
</points>
</series>
<series title="Series3" type="Line" color="#FFFF00">
<points count="8">
<point Y="250"/>
<point Y="242"/>
<point Y="221"/>
<point Y="195"/>
<point Y="175"/>
<point Y="188"/>
<point Y="196"/>
<point Y="193"/>
</points>
</series>
</chart>

    注意:在上面的示例中,可以通过添加TeeChart工具栏或将TeeGally单元添加到uses来省略对RegisterTeeStandardSeries的调用,它只是注册基本的图表样式(线条,条形图,饼图等),因此XML导入过程可以根据xml文件中的系列样式自动创建系列。

生成的图表是:

图表加载示例xml文件。

    从Web URL加载远程XML文件也很简单:

procedure TForm1.FormCreate(Sender: TObject);
begin
  TeeXMLSource1.Chart:=Chart1;
  TeeXMLSource1.FileName:='http://www.steema.com/SampleData.xml';
  TeeXMLSource1.Load;
end;

从web url加载示例xml文件的图表。

只加载一个系列

    XML源组件具有SeriesNode属性,可用于仅加载一个系列(如果XML文件包含多个系列)。

TeeXMLSource1.SeriesNode:='Series2';

加载到现有系列

    如果要将XML文件中包含的一个系列数据加载到现有系列中,请设置Series属性:

TeeXMLSource1.Series:=Series1; 
TeeXMLSource1.SeriesNode:='Series2';

上面的代码将把与Series2对应的XML数据加载到Series1中。

注意:

    如果系列类不同(例如,XML Series2是Line,而Series1是Bar),则最终输出将是Series1填充零点。

为什么?

    Series2的XML数据将点值定义为Y值,而Series1(Bar系列)则将点定义为Bar。

    这个问题有两种解决方案:

  • 设置Series1 valuesource属性以匹配XML点的名称:

Series1.YValues.ValueSource := 'Y';
  • 设置XMLSource组件的ValueSource属性以匹配Series1 valuesource的名称:

    TeeXMLSource1.ValueSource := 'Y';

    附加功能

    TeeXMLSource组件还包括一个XMLDocument属性,该属性将会返回对解析和加载XML数据内部对象的OleVariant引用。此属性是指实现Microsoft的IXMLDomDocument接口的后期绑定创建的实例。

    TeeChart能否使用早期绑定的实例来避免可能出现的版本不兼容的问题,具体取决于您的Windows版本,Internet Explorer版本等。

    TeeXMLSource组件的另一个有用属性是TStringList类型的XML。您可以使用此属性来设置XML数据,而不是使用FileName属性,这样,就不需要XML外部文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值