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文件
<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;该类还提供了将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;导入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;<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>生成的图表是:
从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';注意:
如果系列类不同(例如,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外部文件。