* this is just a subset of the line, just complete with the rest * NEW: added AddressDetail and TaxPercentage CREATE CURSOR xlsOutput (InvoiceNo Varchar(32), SystemEntryDate Datetime, ; productCode Varchar(50), productDescription Varchar(200), ; taxpayable Double, grosstotal Double, ; taxpercentage Double, addressdetail Varchar(200), streetname varchar(100), City varchar(30), Postalcode varchar(60)) LOCAL XML AS MSXML2.DOMDocument60 m.XML = CREATEOBJECT("MSXML2.DOMDocument.6.0") m.XML.Async = .F. m.XML.Load(GETFILE()) LOCAL Invoices AS MSXML2.IXMLDOMNodeList LOCAL Invoice AS MSXML2.IXMLDOMNode LOCAL DocTotals AS MSXML2.IXMLDOMNode LOCAL Details AS MSXML2.IXMLDOMNodeList LOCAL Detail AS MSXML2.IXMLDOMNode * NEW: Address and TAX information in the XML file LOCAL Addresses AS MSXML2.IXMLDOMNodeList LOCAL Address AS MSXML2.IXMLDOMNode LOCAL Tax AS MSXML2.IXMLDOMNode LOCAL StreetName AS MSXML2.IXMLDOMNode LOCAL FromHeader AS Object LOCAL FromTotals AS Object LOCAL FromDetail AS Object * NEW: Address and TAX information VFP buffers LOCAL FromAddress AS Object LOCAL FromTax AS Object LOCAL FromStreet AS Object m.XML.Setproperty("SelectionNamespaces", 'xmlns:saft="urn:OECD:StandardAuditFile-Tax:PT_1.04_01"') m.Invoices = m.XML.Selectnodes("//saft:SourceDocuments/saft:SalesInvoices/saft:Invoice") FOR EACH m.Invoice IN m.Invoices XMLTOCURSOR("<vfp>" + m.Invoice.xml + "</vfp>", "tmpInvoiceHeader") SCATTER NAME FromHeader m.DocTotals = m.Invoice.selectNodes("saft:DocumentTotals").item(0) XMLTOCURSOR("<vfp>" + m.DocTotals.xml + "</vfp>", "tmpInvoiceTotals") SCATTER NAME FromTotals * NEW: select Address node from the invoice and store the data in a VFP buffer m.Address = m.Invoice.selectNodes("saft:ShipTo/saft:Address").item(0) XMLTOCURSOR("<vfp>" + m.Address.xml + "</vfp>", "tmpInvoiceShipTo") SCATTER NAME FromAddress m.Details = m.Invoice.selectNodes("saft:Line") FOR EACH m.Detail IN m.Details XMLTOCURSOR("<vfp>" + m.Detail.xml + "</vfp>", "tmpInvoiceDetail") SCATTER NAME FromDetail * NEW: select tax information from the detail and store the data in a VFP buffer m.Tax = m.Detail.selectNodes("saft:Tax").item(0) XMLTOCURSOR("<vfp>" + m.Tax.xml + "</vfp>", "tmpTax") SCATTER NAME FromTax SELECT xlsOutput APPEND BLANK GATHER NAME m.FromHeader GATHER NAME m.FromTotals GATHER NAME m.FromDetail * NEW: fetch data from VFP buffers GATHER NAME m.FromAddress GATHER NAME m.FromTax ENDFOR ENDFOR SELECT xlsOutput BROWSEI just wanted to ask you when I should use MSXML2.IXMLDOMNodeList, I think it will be when I have more than one row of the same document to be able to consider all rows belonging to it.