public void LoadLibConfig(string file) { this.statusmessage = ""; tables.Clear(); infotables.Clear(); XmlReader xmlr = XmlReader.Create(file); TableInfo currentTable = null; string currentTag = ""; while (xmlr.Read()) { if (xmlr.NodeType == XmlNodeType.Element) { if (xmlr.IsStartElement()) { currentTag = xmlr.Name; switch (currentTag.ToLower()) { case "ini": tablecount = xmlr["TableCount"]; tableinfocount = xmlr["TableInfoCount"]; break; case "table": // Add table to table list currentTable = new TableInfo(); currentTable.Name = xmlr["name"]; currentTable.RowCount = xmlr["RowCount"]; currentTable.TableInfoID = xmlr["TableInfoID"]; currentTable.FieldCnt = xmlr["FieldCnt"]; infotables.Add(xmlr["TableInfoID"]); break; case "fieldinfo": currentTable.AddField(xmlr["Name"], xmlr["IsKey"], xmlr["DataType"]); break; case "row": currentTable.BeginRow(); break; default: break; } } } if (xmlr.NodeType == XmlNodeType.EndElement) { switch (xmlr.Name.ToLower()) { case "ini": break; case "table": if (!currentTable.UpdateMetadata()) { this.statusmessage = "Warning: Table \"" + currentTable.Name + "\" data might be malformed"; } tables.Add(currentTable); break; case "fieldinfo": break; case "row": currentTable.EndRow(); break; default: // Can only get value after tag concluded //currentTable.SetValue(lasttag, xmlr.Value); break; } } if (xmlr.NodeType == XmlNodeType.Text || xmlr.NodeType == XmlNodeType.CDATA) { currentTable.SetValue(currentTag, xmlr.Value); } } // Fix table count info if it does not match int matchTableCount = 0; int.TryParse(tablecount, out matchTableCount); if (matchTableCount != tables.Count) { this.statusmessage = "Warning: Number of tables do not match libconfig info"; tablecount = tables.Count.ToString(); } }