Create XML and write to file

 static void WriteXml(Args _args)  
 XmlDocument xmlDoc;  
 XmlElement xmlRoot;  
 XmlElement xmlField;  
 XmlElement xmlRecord;  
 XMLWriter xmlWriter;  
 CarTable carTable;  
 DictTable dTable = new DictTable(tablenum(CarTable));  
 DictField dField;  
 int i, fieldId;  
 str value;  
 // Create a new object of the XmlDocument class  
 xmlDoc = XmlDocument::newBlank();  
 // Create the root node  
 xmlRoot = xmlDoc.createElement(#CarRootNode);  
 // Loop through all the records in the carTable  
 while select carTable  
 // Create a XmlElement (record) to hold the  
 // contents of the current record.  
 xmlRecord = xmlDoc.createElement(#CarRecords);  
 // Loop through all the fields in the record  
 for (i=1; i<=dTable.fieldCnt(); i++)  
 // Get the fieldId from the field-count  
 fieldId = dTable.fieldCnt2Id(i);  
 // Find the DictField object that matches  
 // the fieldId  
 dField = dTable.fieldObject(fieldId);  
 // Skip system fields  
 if (dField.isSystem())  
 // Create a new XmlElement (field) and  
 // have the name equal to the name of the  
 // dictField  
 xmlField = xmlDoc.createElement(;  
 // Convert values to string. I have just added  
 // a couple of conversion as an example.  
 // Use tableName.(fieldId) instead of fieldname  
 // to get the content of the field.  
 switch (dField.baseType())  
 case Types::Int64 :  
 value = int642str(carTable.(fieldId));  
 case Types::Integer :  
 value = int2str(carTable.(fieldId));  
 default :  
 value = carTable.(fieldId);  
 // Set the innerText of the XmlElement (field)  
 // to the value from the table  
 // Append the field as a child node to the record  
 // Add the record as a child node to the root  
 // Add the root to the XmlDocument  
 // Create a new object of the XmlWriter class  
 // in order to be able to write the xml to a file  
 xmlWriter = XMLWriter::newFile(@"c:\temp\cars.xml");  
 // Write the content of the XmlDocument to the  
 // file as specified by the XmlWriter