Consultor Eletrônico



Kbase P21055: How to parse an XML file in ABL using the DOM parser?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   5/4/2009
Status: Verified

GOAL:

How to parse a XML file in ABL using the DOM parser?

GOAL:

How to read a XML file in 4GL?

FACT(s) (Environment):

Progress 9.1x
OpenEdge 10.x
All Supported Operating Systems

FIX:

The following code reads a file called "personal.xml", processes all the child nodes and displays information if the node name is "person":

/* e-attnam.p */
DEFINE VARIABLE hDoc AS HANDLE NO-UNDO.
DEFINE VARIABLE hRoot AS HANDLE NO-UNDO.
DEFINE VARIABLE good AS LOGICAL NO-UNDO.

CREATE X-DOCUMENT hDoc.
CREATE X-NODEREF hRoot.

hDoc:LOAD("file","personal.xml",TRUE).

hDoc:GET-DOCUMENT-ELEMENT(hRoot).

RUN GetChildren(hRoot, 1).

DELETE OBJECT hDoc.
DELETE OBJECT hRoot.

PROCEDURE GetChildren:
DEFINE INPUT PARAMETER hParent AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER level AS INTEGER NO-UNDO.

DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE hNoderef AS HANDLE NO-UNDO.

CREATE X-NODEREF hNoderef.

REPEAT i = 1 TO hParent:NUM-CHILDREN:
good = hParent:GET-CHILD(hNoderef,i).
IF NOT good THEN
LEAVE.
IF hNoderef:SUBTYPE <> "element" THEN
NEXT.
IF hNoderef:NAME = "person" THEN
MESSAGE "getattr id gives" hNoderef:GET-ATTRIBUTE("id") hNoderef:ATTRIBUTE-NAMES.
RUN GetChildren(hNoderef, (level + 1)).
END.

DELETE OBJECT hNoderef.
END PROCEDURE.