Generate XML

alex10

New Member
Hi to all,
I need to generate xml files for third party software. I search and I found the “External Program Interface” and the example on how to generate xml, am really not an expert in progress and I a code the following, but what didn’t make sense to me create an X-NODEREF for each level of the xml, my final xml file is more complex than this one.

So my question is that some one can give me an example or a better way to generate xml or if im in the right direction.


Thanks in advance




Code:
DEFINE VARIABLE hDoc AS HANDLE.
DEFINE VARIABLE hRoot AS HANDLE.
DEFINE VARIABLE hNode1 AS HANDLE.
DEFINE VARIABLE hNode2 AS HANDLE.
DEFINE VARIABLE hNode3 AS HANDLE.
DEFINE VARIABLE hNode4 AS HANDLE.
DEFINE VARIABLE hField AS HANDLE.
DEFINE VARIABLE hText AS HANDLE.
DEFINE VARIABLE hBuf AS HANDLE.
DEFINE VARIABLE hDBFld AS HANDLE.
DEFINE VARIABLE i AS INTEGER.
CREATE X-DOCUMENT hDoc.
CREATE X-NODEREF hRoot.
CREATE X-NODEREF hNode1.
CREATE X-NODEREF hNode2.
CREATE X-NODEREF hNode3.
CREATE X-NODEREF hNode4.
CREATE X-NODEREF hField.
CREATE X-NODEREF hText.
/*set up a root node*/
hDoc:CREATE-NODE(hRoot,"Customers","ELEMENT").
hDoc:APPEND-CHILD(hRoot).

find first CUSTOMERS no-lock no-error.
hDoc:CREATE-NODE(hNode1,"CustomerType","ELEMENT").
hRoot:APPEND-CHILD(hNode1).
hDoc:CREATE-NODE(hNode2,"Type","ELEMENT").
hNode1:APPEND-CHILD(hNode2).
hDoc:CREATE-NODE(hNode3,"","TEXT").
hNode2:APPEND-CHILD(hNode3).
hNode3:NODE-VALUE = cus_type.

hDoc:CREATE-NODE(hNode2,"Desc","ELEMENT").
hNode1:APPEND-CHILD(hNode2).
hDoc:CREATE-NODE(hNode3,"","TEXT").
hNode2:APPEND-CHILD(hNode3).
hNode3:NODE-VALUE = cus_typedesc.

hDoc:CREATE-NODE(hNode2,"Country","ELEMENT").
hNode1:APPEND-CHILD(hNode2).
hDoc:CREATE-NODE(hNode3,"CtryID","ELEMENT").
hNode2:APPEND-CHILD(hNode3).
hDoc:CREATE-NODE(hNode4,"","TEXT").
hNode3:APPEND-CHILD(hNode4).
hNode4:NODE-VALUE = cus_ctry.
hDoc:CREATE-NODE(hNode3,"CtryName","ELEMENT").
hNode2:APPEND-CHILD(hNode3).
hDoc:CREATE-NODE(hNode4,"","TEXT").
hNode3:APPEND-CHILD(hNode4).
hNode4:NODE-VALUE = cus_ctryname.


/*write the XML node tree to an xml file*/
hDoc:SAVE("file","cust.xml").
DELETE OBJECT hDoc.
DELETE OBJECT hRoot.
DELETE OBJECT hNode1.
DELETE OBJECT hNode2.
DELETE OBJECT hNode3.
DELETE OBJECT hNode4.
DELETE OBJECT hField.
DELETE OBJECT hText.



Final xml example:
<?xml version="1.0" ?>
<Customers>
<CustomerType>
<Type>1000</Type>
<Desc>RETAIL</Desc>
<Country>
<CtryID>10</CtryID>
<CtryName>PUERTO RICO</CtryName>
</Country>
</CustomerType>

</Customers>
 

FrancoisL

Member
Here a simpler way.

DEFINE VARIABLE hdoc AS HANDLE NO-UNDO.
DEFINE VARIABLE hsax AS HANDLE NO-UNDO.

CREATE X-DOCUMENT hdoc.
CREATE SAX-WRITER hsax.

hsax:FORMATTED = TRUE.
hsax:SET-OUTPUT-DESTINATION("FILE","C:\YourFile.xml").
hsax:START-DOCUMENT().
hsax:START-ELEMENT("Customers").

hsax:START-ELEMENT("CustomerType").
hsax:START-ELEMENT("Type").
hsax:WRITE-CHARACTERS("YourType").
hsax:END-ELEMENT("Type").

hsax:START-ELEMENT("Desc").
hsax:WRITE-CHARACTERS("YourDesc").
hsax:END-ELEMENT("Desc").

hsax:START-ELEMENT("Country").
hsax:START-ELEMENT("CtryID").
hsax:WRITE-CHARACTERS("YourCtryID").
hsax:END-ELEMENT("CtryID").
hsax:START-ELEMENT("CtryName").
hsax:WRITE-CHARACTERS("YourCtryName").
hsax:END-ELEMENT("CtryName").
hsax:END-ELEMENT("Country").

hsax:END-ELEMENT("CustomerType").

hsax:END-ELEMENT("Customers").
hsax:END-DOCUMENT().

DELETE OBJECT hsax.
DELETE OBJECT hdoc.
 

alex10

New Member
Thanks for your quick answer but i forgot to say that im working with v91e, and it shows an error.
 
Top