示例#1
0
        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();
            }
        }
示例#2
0
        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();
        }