void IXmlSerializable.WriteXml(XmlWriter writer) { writer.WriteAttribute("generator", this.Generator); writer.WriteAttribute("version", this.Version); if (this.Create != null) { writer.WriteStartElement("create"); for (var i = 0; i < this.Create.Length; i++) { OsmChange.WriteOsmGeo(writer, this.Create[i]); } writer.WriteEndElement(); } if (this.Modify != null) { writer.WriteStartElement("modify"); for (var i = 0; i < this.Modify.Length; i++) { OsmChange.WriteOsmGeo(writer, this.Modify[i]); } writer.WriteEndElement(); } if (this.Delete != null) { writer.WriteStartElement("delete"); for (var i = 0; i < this.Delete.Length; i++) { OsmChange.WriteOsmGeo(writer, this.Delete[i]); } writer.WriteEndElement(); } }
void IXmlSerializable.ReadXml(XmlReader reader) { reader.MoveToContent(); this.Generator = reader.GetAttribute("generator"); this.Version = reader.GetAttributeDouble("version"); List <OsmGeo> creates = new List <OsmGeo>();; List <OsmGeo> modifies = new List <OsmGeo>();; List <OsmGeo> deletes = new List <OsmGeo>();; reader.GetElements( new Tuple <string, Action>( "create", () => { if (reader.IsEmptyElement) { reader.Read(); return; } reader.Read(); while ((reader.Name == "node" || reader.Name == "way" || reader.Name == "relation")) { creates.Add(OsmChange.ReadOsmGeo(reader)); if (reader.NodeType == XmlNodeType.EndElement && (reader.Name == "node" || reader.Name == "way" || reader.Name == "relation")) { reader.Read(); } } reader.Read(); }), new Tuple <string, Action>( "modify", () => { if (reader.IsEmptyElement) { reader.Read(); return; } reader.Read(); while ((reader.Name == "node" || reader.Name == "way" || reader.Name == "relation")) { modifies.Add(OsmChange.ReadOsmGeo(reader)); if (reader.NodeType == XmlNodeType.EndElement && (reader.Name == "node" || reader.Name == "way" || reader.Name == "relation")) { reader.Read(); } } reader.Read(); }), new Tuple <string, Action>( "delete", () => { if (reader.IsEmptyElement) { reader.Read(); return; } reader.Read(); while ((reader.Name == "node" || reader.Name == "way" || reader.Name == "relation")) { deletes.Add(OsmChange.ReadOsmGeo(reader)); if (reader.NodeType == XmlNodeType.EndElement && (reader.Name == "node" || reader.Name == "way" || reader.Name == "relation")) { reader.Read(); } } reader.Read(); })); this.Create = creates.ToArray(); this.Modify = modifies.ToArray(); this.Delete = deletes.ToArray(); }