DEFINE CLASS VFPDomhandler AS Session OLEPUBLIC cVersion = 'MSXML2.DOMDOCUMENT.4.0' oXml = .NULL. FUNCTION Init LOCAL llRetVal llRetVal = DODEFAULT() IF llRetVal *** instantiate the dom This.oXML = CREATEOBJECT( This.cVersion ) ENDIF RETURN llRetVal ENDFUNC FUNCTION Parse( tcFile ) WITH This.oXml .load( tcFile ) This.ProcessNode( .DocumentElement ) ENDWITH ENDFUNC FUNCTION processnode( tonode ) #DEFINE NODE_INVALID 0 #DEFINE NODE_ELEMENT 1 #DEFINE NODE_ATTRIBUTE 2 #DEFINE NODE_TEXT 3 #DEFINE NODE_CDATA_SECTION 4 #DEFINE NODE_ENTITY_REFERENCE 5 #DEFINE NODE_PROCESSING_INSTRUCTION 7 #DEFINE NODE_COMMENT 8 #DEFINE NODE_DOCUMENT 9 #DEFINE NODE_DOCUMENT_TYPE 10 #DEFINE NODE_DOCUMENT_FRAGMENT 11 #DEFINE NODE_NOTATION 12 *** Next see if we have any attributes This.GetAttributes( toNode ) *** if this is a text node, use it to do whatever you want IF toNode.NodeType = NODE_TEXT ? toNode.NodeValue ENDIF *** Process any kids IF toNode.HasChildNodes FOR EACH lochild in toNode.ChildNodes This.ProcessNode( loChild ) ENDFOR ENDIF ENDFUNC FUNCTION GetAttributes( toNode ) LOCAL loAttributes, lnAttributes, lnAttr loAttributes = toNode.Attributes IF VARTYPE( loAttributes ) = 'O' lnAttributes = loAttributes.Length - 1 IF lnAttributes >= 0 FOR lnAttr = 0 TO lnAttributes ? loAttributes.Item[ lnAttr ].NodeName + [: ] + loAttributes.Item[ lnAttr ].NodeValue ENDFOR ENDIF ENDIF ENDFUNC