前言
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或更高版本(評估或註冊)。
教程全文完