using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Xml; namespace SBD_Parser { class XmlIO { public DataTable ReadXml(string filename) { DataTable dt = new DataTable("xmldata"); dt.Columns.Add("Parameter"); dt.Columns.Add("Values"); dt.Columns.Add("Unit"); bool bStartRead = false; int valuecount=0; string sParameter="", sUnit="", sValue=""; using (XmlReader reader = XmlReader.Create(filename)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "Command") { bStartRead = true; reader.Read(); while (!(reader.NodeType == XmlNodeType.Element)) reader.Read(); } if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Command") { bStartRead = false; dt.Rows.Add(sParameter, sValue, sUnit); valuecount = 0; sValue = ""; } if (bStartRead) { if (reader.NodeType == XmlNodeType.Element) { string readstring = reader.ReadString(); switch (reader.Name) { case "NoOfValues": break; case "Parameter": sParameter = readstring; break; case "Value": sValue += readstring+"#"; valuecount++; break; case "Unit": sUnit = readstring; break; default: break; } } } } } return dt; } private void WriteXml(DataTable dt, string FileName, string ParentName) { using (XmlWriter writer = XmlWriter.Create(FileName)) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = "\t"; settings.NewLineOnAttributes = true; writer.WriteStartDocument(); writer.WriteStartElement("Flash_Settings"); foreach (DataRow row in dt.Rows) { writer.WriteStartElement("Command"); writer.WriteElementString("Parameter", (string)row.ItemArray[0]); string[] words = ((string)row.ItemArray[1]).Split('#'); for (int i = 0; i < words.Length - 1; i++) { writer.WriteElementString("Value", words[i]); } writer.WriteElementString("Unit", (string)row.ItemArray[2]); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndDocument(); } } public void WriteKml(DataTable dt, string FileName) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = "\t"; settings.NewLineOnAttributes = true; using (XmlWriter writer = XmlWriter.Create(FileName,settings)) { int count = 0; writer.WriteStartDocument(); writer.WriteStartElement("kml", "http://www.opengis.net/kml/2.2"); writer.WriteStartElement("Document"); foreach (DataRow row in dt.Rows) { count++; writer.WriteStartElement("Placemark"); writer.WriteElementString("Name", "Point"+count.ToString()); writer.WriteElementString("Description", "Point"+count.ToString()); writer.WriteStartElement("Point"); writer.WriteElementString("coordinates", row["Longitude"] + "," + row["Latitude"]); writer.WriteEndElement(); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); } } public void WriteKml(DataTable dt, string FileName, bool timestamp, bool path, string color, int width, bool supplyv, bool adc2,bool adc3,bool gpio0,bool gpio1, bool acc,bool gyro) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = "\t"; settings.NewLineOnAttributes = true; string coordinates = ""; using (XmlWriter writer = XmlWriter.Create(FileName, settings)) { int count = 0; writer.WriteStartDocument(); writer.WriteStartElement("kml", "http://www.opengis.net/kml/2.2"); writer.WriteStartElement("Document"); writer.WriteElementString("name", "Locations"); writer.WriteElementString("description","GPS Co-ordinates" ); foreach (DataRow row in dt.Rows) { coordinates += row["Longitude"] + "," + row["Latitude"] + "\t"; count++; writer.WriteStartElement("Placemark"); if (timestamp) { if ((string)row["Time"] != "") { writer.WriteStartElement("TimeStamp"); writer.WriteElementString("when", (string)row["Time"]); writer.WriteEndElement(); } } // For externded data writer.WriteStartElement("ExtendedData"); if (supplyv) { if ((string)row["SupplyVoltage"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "Supply Voltage"); writer.WriteElementString("value", (string)row["SupplyVoltage"]); writer.WriteEndElement(); } } if (adc2) { if ((string)row["ADC2"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "ADC 2 Value"); writer.WriteElementString("value", (string)row["ADC2"]); writer.WriteEndElement(); } } if (adc3) { if ((string)row["ADC3"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "ADC 3 Value"); writer.WriteElementString("value", (string)row["ADC3"]); writer.WriteEndElement(); } } if (gpio0) { if ((string)row["GPIO0"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "GPIO0 Value"); writer.WriteElementString("value", (string)row["GPIO0"]); writer.WriteEndElement(); } } if (gpio1) { if ((string)row["GPIO1"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "GPIO1 Value"); writer.WriteElementString("value", (string)row["GPIO1"]); writer.WriteEndElement(); } } if (acc) { if ((string)row["ACC"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "Accelerometer Values"); writer.WriteElementString("value", (string)row["ACC"]); writer.WriteEndElement(); } } if (gyro) { if ((string)row["GPIO1"] != "") { writer.WriteStartElement("Data"); writer.WriteAttributeString("name", "string"); writer.WriteElementString("displayName", "Gyroscope Value"); writer.WriteElementString("value", (string)row["GYRO"]); writer.WriteEndElement(); } } writer.WriteEndElement(); writer.WriteElementString("Name", "Point" + count.ToString()); //writer.WriteElementString("Description", "Point" + count.ToString()); writer.WriteStartElement("Point"); writer.WriteElementString("coordinates", row["Longitude"] + "," + row["Latitude"]); writer.WriteEndElement(); writer.WriteEndElement(); } if (path) { //Writing the style //Writes