/// <summary> /// Writes data from the box into a file by XmlTextWriter /// </summary> /// <param name="box"></param> /// <param name="path"></param> public void WriteFiguresByXmlTextWriter(Box box, string path) { using (XmlTextWriter writer = new XmlTextWriter(path, System.Text.Encoding.UTF8)) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("Figures"); FiguresTypes type; XMLTextReaderDataParser parser = new XMLTextReaderDataParser(); for (int i = 0; i < box.Size; i++) { if (box[i] == null) { continue; } else { if (Enum.TryParse(box[i].GetType().Name.ToString(), out type)) { switch (type) { case FiguresTypes.PaperCircle: parser.ParsePaperCircleAsXmlNode(writer, (PaperCircle)box[i]); break; case FiguresTypes.PaperRectangle: parser.ParsePaperRectangleAsXmlNode(writer, (PaperRectangle)box[i]); break; case FiguresTypes.PaperTriangle: parser.ParsePaperTriangleAsXmlNode(writer, (PaperTriangle)box[i]); break; case FiguresTypes.FilmCircle: parser.ParseFilmCircleAsXmlNode(writer, (FilmCircle)box[i]); break; case FiguresTypes.FilmRectangle: parser.ParseFilmRectangleAsXmlNode(writer, (FilmRectangle)box[i]); break; case FiguresTypes.FilmTriangle: parser.ParseFilmTriangleAsXmlNode(writer, (FilmTriangle)box[i]); break; } } } } writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); } }
/// <summary> /// Reads Xml file by XmlTextReader /// </summary> /// <param name="path"></param> /// <returns>new Box</returns> public Box ReadXmlByXmlTextReader(string path) { using (XmlTextReader reader = new XmlTextReader(path)) { reader.MoveToContent(); int i = 0; Box box = new Box(); bool hasMore = reader.Read(); FiguresTypes type; XMLTextReaderDataParser parser = new XMLTextReaderDataParser(); while (hasMore) { if (reader.NodeType == XmlNodeType.Element && Enum.TryParse(reader.Name, out type)) { switch (type) { case FiguresTypes.PaperCircle: box[i] = parser.ParseAsPaperCircle(reader); i++; break; case FiguresTypes.PaperRectangle: box[i] = parser.ParseAsPaperRectangle(reader); i++; break; case FiguresTypes.PaperTriangle: box[i] = parser.ParseAsPaperTriangle(reader); i++; break; case FiguresTypes.FilmCircle: box[i] = parser.ParseAsFilmCircle(reader); i++; break; case FiguresTypes.FilmRectangle: box[i] = parser.ParseAsFilmRectangle(reader); i++; break; case FiguresTypes.FilmTriangle: box[i] = parser.ParseAsFilmTriangle(reader); i++; break; } } else { hasMore = reader.Read(); } } return(box); } }