This is to help people who are looking for an answer to this question, the solution we found most effective:
We took the node idea from here: How to Return Only Certain Columns of a List When using the SharePoint Web Service?
Then we went through the process of extract the fields that we want into a datatable. Firstly we create an appropriate amount of columns to fields. Then going through the child nodes to extract all the row data. Doing this for each of the fields that we have requested.
var myData = new DataTable();
foreach (string field in fields)
{
myData.Columns.Add(field);
}
foreach (XmlNode node in nodeListItems)
{
// rs = RowSet
if (node.Name == "rs:data")
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name == "z:row")
{
DataRow row = myData.NewRow();
foreach (string field in fields)
{
var xmlAttributeCollection = node.ChildNodes[i].Attributes;
if (xmlAttributeCollection != null)
row[field] = xmlAttributeCollection["ows_" + field].Value;
}
myData.Rows.Add(row);
}
}
}
}
return myData;