Consultor Eletrônico



Kbase P111425: 4GL: How to use the Microsoft XMLDOM COM object parser to load an XML file into a TEMP-TABLE?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   01/12/2008
Status: Verified

GOAL:

4GL/ABL: How to use the Microsoft XMLDOM COM object parser to load an XML file into a TEMP-TABLE?

FACT(s) (Environment):

Progress 9.x
OpenEdge 10.x

FIX:

The following code populates a 4GL TEMP-TABLE from the XML file created by the code in solution P26744:
/* Define the "Microsoft.XMLDOM" COM-HANDLE objects */
DEFINE VARIABLE hDocument AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE hRecord AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE hField AS COM-HANDLE NO-UNDO.
/* Define Temp Table ttCustomer Buffer and Current Field Handle */
DEFINE VARIABLE hCustomerBuffer AS HANDLE NO-UNDO.
DEFINE VARIABLE hCurrentField AS HANDLE NO-UNDO.
/* Counter, Returned Result and NameSpace variables */
DEFINE VARIABLE lResult AS LOGICAL NO-UNDO.
DEFINE TEMP-TABLE ttCustomer NO-UNDO LIKE Customer.
/* Instantiate the DOM COM object */
CREATE "Microsoft.XMLDOM" hDocument.
ASSIGN
hDocument:async ="false"
lResult = hDocument:LOAD("Customer.xml")
hRecord = hDocument:documentElement:firstChild
hCustomerBuffer = BUFFER ttCustomer:HANDLE.
REPEAT WHILE VALID-HANDLE (hRecord):
CREATE ttCustomer.
ASSIGN
ttCustomer.CustNum = INTEGER(hRecord:attributes:ITEM(0):TEXT)
ttCustomer.NAME = hRecord:attributes:ITEM(1):TEXT
hField = hRecord:firstChild.
REPEAT WHILE VALID-HANDLE(hField):
ASSIGN
hCurrentField = hCustomerBuffer:BUFFER-FIELD(hField:basename).
hCurrentField:BUFFER-VALUE = hField:TEXT.
hField = hField:nextSibling.
END.
hRecord = hRecord:nextSibling.
END.
FOR EACH ttCustomer:
DISPLAY
ttCustomer.CustNum FORMAT "ZZZZZ"
ttCustomer.NAME FORMAT "X(15)"
ttCustomer.Balance FORMAT ">>>,>>>.99"
ttCustomer.Country FORMAT "X(12)"
ttCustomer.CreditLimit FORMAT ">>>,>>>.99"
ttCustomer.SalesRep FORMAT "X(4)"
WITH STREAM-IO.
END.
/* Clear Memory: Release objects, delete handles and set all to unknown */
RELEASE OBJECT hDocument.
ASSIGN
hDocument = ?.