任務:將如下輸入XML變成如下輸出XML
輸入XML:
<employees><employee><id>001</id><name>張飛</name><age>28</age></employee><employee><id>002</id><name>關羽</name><age>29</age></employee><employee> <id>003</id><name>趙云</name><age>30</age></employee></employees>
輸出XML:
<summary><count>3</count><names>張飛,關羽,趙云,</names><maxAge>30</maxAge><avgAge>2.9E+1</avgAge></summary>
我們需要做一個Input節點和一個Output節點以及一個Comput節點,并設置Compute節點的ESQL如下:
CREATE COMPUTE MODULE flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- 員工總數
DECLARE Count INTEGER 0;
-- 得到XML中員工總數
SET Count=CARDINALITY(InputRoot.XML.employees.employee[]);
-- 員工姓名匯總
DECLARE Names CHARACTER;
SET Names='';
-- 最大年齡
DECLARE MaxAge INTEGER 0;
-- 年齡合計
DECLARE SumAge INTEGER 0;
-- 當前年齡
DECLARE CurrAge INTEGER 0;
-- 循環變量
DECLARE I INTEGER 1;
WHILE I<=Count DO
-- 字符串拼接
SET Names=Names || InputRoot.XML.employees.employee[I].name ;
SET Names=Names || ',';
-- 字符串轉換成整數再進行年齡合計
SET CurrAge = CAST(InputRoot.XML.employees.employee[I].age AS INTEGER);
SET SumAge=SumAge+CurrAge;
-- 得到最大年齡
IF MaxAge<CurrAge THEN
SET MaxAge=CurrAge;
END IF;
SET I=I+1;
END WHILE;
-- 平均年齡
DECLARE AvgAge FLOAT;
SET AvgAge=SumAge/Count;
-- 拼接輸出XML
SET OutputRoot.XML.summary.count=Count;
SET OutputRoot.XML.summary.names=Names;
SET OutputRoot.XML.summary.maxAge=MaxAge;
SET OutputRoot.XML.summary.avgAge=CAST(AvgAge AS CHARACTER);
RETURN TRUE;
END;
END MODULE;
本例工程下載地址:
http://www.tkk7.com/Files/heyang/ESqlTest0920_01.rar