public static int Main(string[] args) { var parsedArgs = new ParsedArgs(args); if (parsedArgs.Ready) { Console.WriteLine(parsedArgs); using (XmlReader fileReader = XmlReader.Create(parsedArgs.InTrackFile)) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.CloseOutput = true; settings.Encoding = UTF8Encoding.UTF8; settings.WriteEndDocumentOnClose = true; settings.NamespaceHandling = NamespaceHandling.OmitDuplicates; using (XmlWriter fileWriter = XmlWriter.Create(parsedArgs.OutTrackFile, settings)) { Statistics stats = new Statistics(); GpxPoint previous = null; stats.Init(); ProcessMethodExtended dealPoint = (XmlReader entry, object extraData) => { GpxPoint current = new GpxPoint(ProcessXml.ReadElement(entry), fileReader.NamespaceURI); if (current.Hdop > parsedArgs.HdopLimit) { Console.WriteLine(current + ", hdop " + current.Hdop); } else { ProcessPoint(current, ref previous, ref stats); } current.Entry.WriteTo(extraData as XmlWriter); }; var segment = new PartsRunner("trkseg", "trkpt", dealPoint); var track = new PartsRunner("trk", "trkseg", segment.Run); fileWriter.WriteStartDocument(); fileReader.MoveToContent(); fileWriter.WriteStartElement("gpx", fileReader.NamespaceURI); // xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> fileWriter.WriteAttributeString("version", "1.1"); ProcessXml.ProcessEntries(fileReader, "trk", track.Run, fileWriter); fileWriter.WriteEndElement(); fileWriter.Close(); Console.WriteLine(stats); } } } else { Console.WriteLine("Wrong arguments passed to the application."); } return(0); }
public void Run(XmlReader reader, object extraData) { XmlWriter writer = (extraData as XmlWriter); writer.WriteStartElement(_selfName); ProcessXml.ProcessEntries(reader, _checkData, _subMethod, writer); writer.WriteEndElement(); }