loXML = CREATEOBJECT( "MSXML2.DOMDocument.3.0" ) loXML.loadXML( SomeXMLString ) && or loXML.Load ( SomeXMLFile ) loRoot = loXML.documentElement IF ISNULL( loRoot ) RETURN 'Invalid XML file' ENDIF CREATE CURSOR mycursor ( somefield1 C(10), somefield2 C(8), xmlnode3 C(4) ) append blank *** field 1 loElement= loRoot.selectSingleNode( "SomeField1" ) && careful, case sensitive IF ISNULL( loElement ) COMRETURNERROR( 'YourWebServiceClass', 'SomeField1 node not found' ) ELSE IF EMPTY( loElement.Text ) COMRETURNERROR( 'YourWebServiceClass', 'The field is empty...' ) else replace mycursor.somefield1 with loElement.Text endif ENDIF *** field 2 loElement= loRoot.selectSingleNode( "SomeField2" ) IF ISNULL( loElement ) COMRETURNERROR( 'YourWebServiceClass', 'SomeField2 node not found' ) ELSE IF EMPTY( loElement.Text ) COMRETURNERROR( 'YourWebServiceClass', 'The field is empty...' ) else replace mycursor.somefield2 with allt(loElement.Text) endif ENDIF *** field 3 - this one is under a branch named SomeBranch loElement= loRoot.selectSingleNode( "SomeBranch/XmlNode3" ) IF ISNULL( loElement ) COMRETURNERROR( 'YourWebServiceClass', 'node not found' ) ELSE IF EMPTY( loElement.Text ) COMRETURNERROR( 'YourWebServiceClass', 'The field is empty...' ) else replace mycursor.xmlnode3 with loElement.Text endif ENDIFAlso, if you have many records in one xml file or string, you can traverse them with SelectNodes instead of SelectSingleNode. Drop me a line if you need an example of this one.