前言
TeeChart 5及其后来版本支持图表序列数据的XML输出。
6及其后来版本支持XML格式的数据输入。
本教程展示了关于以XML格式导出和导入图表数据的详细讲解。
15.1 导出
在设计时或运行时使用图表导出对话框,图表数据可以很容易地导出为XML格式:
图1,TeeChart对话框,data(数据)选项卡标签。
在这个对话框中,您可以选择要导出哪个序列(或者“all”导出所有系列),以及您是否想要导出Point Index(点索引)(0、1、2…等等),Point Labels(点文字-标签)或Point Colors(点颜色)。
“Copy”按钮生成XML文本并将其复制到Windows或Linux剪贴板。“Save”按钮创建一个新的XML文件。
with Internet Explorer. 例如,可以使用InternetExplorer打开XML文件,。
在导出多个序列时,XML格式有一点不同:
15.1.1 导出代码
TeeChart提供了一个以XML格式导出序列数据的类。
这个类位于TeeStore.pas单元,它的名字是TSeriesDataXML
保存文件的例子:
Uses TeeStore;
with TSeriesDataXML.Create(Chart1, Series1) do
try
SaveToFile('c:\sample.xml');
finally
Free;
end;
如果您想要导出Chart1中的所有序列,请在Create构造函数的最后一个参数中传递传递“nil”,而不是Series1。
这个类还提供了一个函数来将XML输出转换成字符串:
var S : String;
with TSeriesDataXML.Create(Chart1, Series1) do
try
S:=AsString;
finally
Free;
end;
一些属性控制了要导出的数据类型,例如,如果包含/不包含point colors(点颜色):
with TSeriesDataXML.Create(Chart1, Series1) do
try
IncludeColors:=True;
SaveToFile('c:\sample.xml');
finally
Free;
end;
到目前为止,我们已经了解了如何生成包含TeeChart序列点的XML数据。
现在我们来做相反的工作,将这个XML导入到图表中。
15.2 XML数据导入
TeeChart Pro包含一个自动加载XML数据的组件。
该组件驻留在TeeXML.pas单元,类名是TTeeXMLSource。
图2,在Delphi工具栏中的TeeXMLSource组件。
加载XML图表所需的最少属性是“Chart(图表)”和“FileName(文件名)”。
图表属性指示在哪里(哪个图表)添加XML数据。文件名属性也可以是一个web地址(URL)。
Load方法开始将XML数据加载到图表序列中。
让我们创建一个新的应用程序,并终止一个Chart1组件和一个TeeXMLSource1组件。
uses Series;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterTeeStandardSeries; //确保“Line(线)”样式被加载。
TeeXMLSource1.Chart:=Chart1;
TeeXMLSource1.FileName:='http://www.steema.com/support/teechart/6/tutorials/xml/TeeChartSampleManySeries.xml';
TeeXMLSource1.Load;
end;
注意:在上面的示例中,通过添加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;
图4,从web url加载示例xml文件的图表。
15.2.1 加载一个序列
XML源组件有一个SeriesNode属性,可用于仅加载一个序列(以防XML文件包含多个序列)。
TeeXMLSource1.SeriesNode:='Series2';
15.2.2 加载到现有的序列
如果您希望将XML文件中包含的一个序列数据加载到一个现有的序列中,那么可以设置该序列属性:
TeeXMLSource1.Series:=Series1;
TeeXMLSource1.SeriesNode:='Series2';
上面的代码将把对应“Series2”的XML数据加载到Series1中。
注意:
如果两个序列类不相同(例如,XML Series2是一个“线”,而Series1是一个“棒条”),那么最终的输出的将是一个填满空点的Series1。
为什么 ?
“Series2”的XML数据将点值定义为“Y”值,而Series1(一个Bar系列),期望点被定义为“Bar”。
这个问题有两种解决方法:
a)设置Series1的valuesource属性来匹配XML点的名字:
Series1.YValues.ValueSource := 'Y';
b)设置XMLSource组件的ValueSource属性来匹配Series1 ValueSource的名字:
TeeXMLSource1.ValueSource := 'Y';
15.3 附加特性
TeeXMLSource组件还包含一个XMLDocument属性,该属性将对解析和加载XML数据的内部对象返回一个OleVariant引用。
这个属性引用了一个实现了Microsoft的IXMLDomDocument接口的已创建的后期绑定的实例。
TeeChart不要使用一个早期绑定的实例来避免依赖关系和版本不兼容问题,这取决于您的Windows版本、InternetExplorer版本等等。
如果您想要阅读关于在Delphi中使用XML解析器的优秀文章,请循着这个链接到Delphi杂志的网站。
TeeXMLSource组件的另一个有用属性是TStringList类型的“XML”。
您可以使用这个属性来设置XML数据,而不是使用FileName属性。这样,就不需要XML外部文件了。
本教程中使用的演示程序也可以下载。
注意:为了编译这个演示程序,需要使用TeeChart Pro版本6或更高版本(评估或注册)。
教程全文完