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(); } } } }