Wednesday, February 10, 2010

A simple pair of Get and Set Inner Text functions for OpenEdge Xml:

FUNCTION SetInnerText RETURNS CHARACTER (INPUT hxDoc AS HANDLE, INPUT-OUTPUT hXBaseNode AS HANDLE, INPUT nodeValue AS CHARACTER):
DEFINE VARIABLE hxTextNode AS HANDLE NO-UNDO.
CREATE X-NODEREF hxTextNode.

DO ON ERROR UNDO, LEAVE:
IF(hxBaseNode:NUM-CHILDREN > 0) THEN DO:
hxBaseNode:GET-CHILD(hxTextNode, 1).
IF (hxTextNode:SUBTYPE = "TEXT") THEN DO:
hxTextNode:NODE-VALUE = nodeValue.
RETURN hxTextNode:NODE-VALUE.
END.
ELSE
RETURN "".
END.
ELSE DO:
hxDoc:CREATE-NODE(hxTextNode, "", "TEXT").
hxTextNode:NODE-VALUE = nodeValue.
hXBaseNode:APPEND-CHILD(hxTextNode).
RETURN hxTextNode:NODE-VALUE.
END.
CATCH err AS PROGRESS.Lang.SysError:
RETURN "".
END CATCH.
END.
END FUNCTION.

FUNCTION GetInnerText RETURNS CHARACTER (INPUT hXBaseNode AS HANDLE):
DEFINE VARIABLE hxTextNode AS HANDLE NO-UNDO.
CREATE X-NODEREF hxTextNode.

DO ON ERROR UNDO, LEAVE:
hxBaseNode:GET-CHILD(hxTextNode, 1).
IF (hxTextNode:SUBTYPE = "TEXT") THEN DO:
RETURN hxTextNode:NODE-VALUE.
END.
ELSE
RETURN "".
CATCH err AS PROGRESS.Lang.SysError:
RETURN "".
END CATCH.
END.
END FUNCTION.

No comments: