TeeChart Pro VCL/FMX是一款主流的图表制作工具。提供了数百种用于可视化的2D、3D图形样式、56种数学、统计和金融函数,以及不限数量的坐标轴和30种调色板组件。TeeChart Pro VCL/FMX教程将会以连载的形式持续为大家带来TeeChart Pro VCL/FMX的使用方法。
本篇教程为大家带来的是TeeChart Pro VCL/FMX中XML导出和导入这一节,在TeeChart版本5及更高版本中,支持图表系列数据的XML输出;版本6及更高版本支持XML格式的数据输入。
本教程显示了有关以XML格式导出和导入图表数据的详细说明。
导出
使用图表导出对话框,可以在设计时或运行时轻松地将图表数据导出为XML格式:
在此对话框中,您可以选择要导出的系列(或导出所有系列),以及是否要导出点索引(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。
加载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文件中的系列样式自动创建系列。
生成的图表是:
从Web URL加载远程XML文件也很简单:
procedure TForm1.FormCreate(Sender: TObject);
begin
TeeXMLSource1.Chart:=Chart1;
TeeXMLSource1.FileName:='http://www.steema.com/SampleData.xml';
TeeXMLSource1.Load;
end;
只加载一个系列
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外部文件。