DEFINE VARIABLE chXmlDoc AS COM-HANDLE.
DEFINE VARIABLE chXmlNodeList AS COM-HANDLE.
DEFINE VARIABLE strPath AS CHARACTER INIT "C:\xmlFile.xml"
CREATE "Msxml.DomDocument" chXmlDoc.
blnOk = chXmlDoc:LOAD(strPath). /*the path of the xml*/
chXmlNodeList = chXmlDoc:documentElement:childNodes.
RUN readNodeList(chXmlNodeList).
PROCEDURE readNodeList:
DEFINE INPUT PARAMETER chXmlNodeList AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE chNewXmlNodeList AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE chXmlNode AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE chXmlNodeParent AS COM-HANDLE NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO INIT 0.
DO WHILE i < chXmlNodeList:LENGTH:
chXmlNode = chXmlNodeList:ITEM(i).
chXmlNodeParent = chXmlNode:ParentNode.
/* If there are childNodes he will read the new list of this node */
/* <tag>value</tag> still has childNodes (PROGRESS RULES) */
/* If he enters value, there are no more childNodes */ <---- Don't know if you get this one.. <tag> will have 1 child (value) so he will run readNodeList again..
IF chXmlNode:hasChildNodes() THEN DO:
chNewXmlNodeList = chXmlNode:childNodes().
RUN readNodeList(chNewXmlNodeList). /*like going deeper in a tree*/
END.
ELSE DO:
IF chXmlNodeParent:BaseName = "[COLOR=#333333]AvailabilityStatusDescription" THEN DO: /*chXmlNodeParent because of the comment above <[/COLOR][COLOR=#333333]AvailabilityStatusDescription> is the parent of the value in it..[/COLOR][COLOR=#333333]*/
IF chXmlNode:nodeValue = "Available" THEN RUN doThis. /*The content "Available" will be seen as the xmlNode itself*/
END.[/COLOR]
END.
END PROCEDURE.