Пожалуйста, посмотрите код ниже:
CREATE PROCEDURE removeEmpty (IN inData REFERENCE, INOUT outData REFERENCE) BEGIN
DECLARE n INTEGER CARDINALITY(inData.*:*[]);
DECLARE i INTEGER 0;
DECLARE Ref REFERENCE TO outData;
WHILE i < n DO
SET i = i + 1;
DECLARE fieldTp INTEGER FIELDTYPE(inData.*:*[i]);
-- 50331648 is NameValue type
IF fieldTp = 50331648 THEN
IF FIELDVALUE(inData.*:*[i]) IS NOT NULL AND LENGTH(CAST(FIELDVALUE(inData.*:*[i]) AS CHARACTER)) > 0 THEN
CREATE LASTCHILD OF Ref TYPE FIELDTYPE(inData.*:*[i]) NAME FIELDNAME(inData.*:*[i]) VALUE FIELDVALUE(inData.*:*[i]);
END IF;
ELSE
CREATE LASTCHILD OF Ref TYPE FIELDTYPE(inData.*:*[i]) NAME FIELDNAME(inData.*:*[i]);
CALL removeEmpty(inData.*:*[i], Ref.*[<]);
MOVE Ref TO outData;
END IF;
END WHILE;
MOVE outData TO Ref;
END;