示例#1
0
 void IXmlSerializable.ReadXml(XmlReader reader)
 {
     // osm.api.version sometimes has attributes, sometimes just a value
     if (reader.HasAttributes)
     {
         this.Minimum = reader.GetAttributeDouble("minimum");
         this.Maximum = reader.GetAttributeDouble("maximum");
     }
     else if (!reader.IsEmptyElement)
     {
         reader.Read();
         if (double.TryParse(reader.Value, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out double value))
         {
             this.Maximum = value;
             this.Minimum = value;
         }
     }
 }
示例#2
0
        void IXmlSerializable.ReadXml(XmlReader reader)
        {
            reader.MoveToContent();

            this.Version   = reader.GetAttributeDouble("version");
            this.Generator = reader.GetAttribute("generator");

            List <OsmGeoResult> results = null;

            while (reader.Read() &&
                   reader.MoveToContent() != XmlNodeType.None)
            {
                if (reader.Name == "node")
                {
                    if (results == null)
                    {
                        results = new List <OsmGeoResult>();
                    }
                    var nodeResult = new NodeResult();
                    (nodeResult as IXmlSerializable).ReadXml(reader);
                    results.Add(nodeResult);
                }
                else if (reader.Name == "way")
                {
                    if (results == null)
                    {
                        results = new List <OsmGeoResult>();
                    }
                    var wayResult = new WayResult();
                    (wayResult as IXmlSerializable).ReadXml(reader);
                    results.Add(wayResult);
                }
                else if (reader.Name == "relation")
                {
                    if (results == null)
                    {
                        results = new List <OsmGeoResult>();
                    }
                    var relationResult = new RelationResult();
                    (relationResult as IXmlSerializable).ReadXml(reader);
                    results.Add(relationResult);
                }
                else
                {
                    if (results == null)
                    {
                        results = new List <OsmGeoResult>();
                    }
                    return;
                }
            }
            if (results != null)
            {
                this.Results = results.ToArray();
            }
        }
示例#3
0
        void IXmlSerializable.ReadXml(XmlReader reader)
        {
            this.Id          = reader.GetAttributeInt64("id");
            this.Version     = reader.GetAttributeInt32("version");
            this.Latitude    = reader.GetAttributeDouble("lat");
            this.Longitude   = reader.GetAttributeDouble("lon");
            this.ChangeSetId = reader.GetAttributeInt64("changeset");
            this.TimeStamp   = reader.GetAttributeDateTime("timestamp");
            this.UserId      = reader.GetAttributeInt32("uid");
            this.UserName    = reader.GetAttribute("user");
            this.Visible     = reader.GetAttributeBool("visible");

            TagsCollection tags = null;

            while (reader.Read() &&
                   reader.MoveToContent() != XmlNodeType.None)
            {
                if (reader.Name == "tag")
                {
                    if (tags == null)
                    {
                        tags = new TagsCollection();
                    }
                    tags.Add(new Tag()
                    {
                        Key   = reader.GetAttribute("k"),
                        Value = reader.GetAttribute("v")
                    });
                }
                else
                {
                    if (tags != null)
                    {
                        this.Tags = tags;
                    }
                    return;
                }
            }
            if (tags != null)
            {
                this.Tags = tags;
            }
        }
示例#4
0
        private Track ReadTrack(XmlReader reader)
        {
            reader.AssertElementStart(Keys.Track);

            Track track = new Track()
            {
                Disc                = reader.GetAttributeInt32(Keys.Disc, 0),
                Position            = reader.GetAttributeInt32(Keys.Position, 0),
                Title               = reader.GetAttributeOrNull(Keys.Title),
                JoinedArtists       = reader.GetAttributeOrNull(Keys.JoinedArtists),
                RelativeFilename    = reader.GetAttributeOrNull(Keys.RelativeFilename),
                DynamicRange        = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN),
                ReplayGainTrackGain = reader.GetAttributeDouble(Keys.TrackGain, double.NaN),
                ReplayGainTrackPeak = reader.GetAttributeDouble(Keys.TrackPeak, double.NaN),
            };

            if (reader.IsEmptyElement)
            {
                return(track);
            }

            while (reader.Read())
            {
                if (reader.IsElementEnd(Keys.Track))
                {
                    break;
                }

                if (reader.IsElementStart(Keys.Artists))
                {
                    this.ReadTrackArtists(reader, track);
                }
                else
                {
                    throw new FormatException(InvalidXmlDatabase);
                }
            }

            return(track);
        }
示例#5
0
        void IXmlSerializable.ReadXml(XmlReader reader)
        {
            this.Version   = reader.GetAttributeDouble("version");
            this.Generator = reader.GetAttribute("generator");

            List <Node>      nodes      = null;
            List <Way>       ways       = null;
            List <Relation>  relations  = null;
            List <Changeset> changesets = null;

            reader.GetElements(
                new Tuple <string, Action>(
                    "api", () =>
            {
                this.Api = new Capabilities();
                (this.Api as IXmlSerializable).ReadXml(reader);
                reader.Read();
            }),
                new Tuple <string, Action>(
                    "bounds", () =>
            {
                this.Bounds = new Bounds();
                (this.Bounds as IXmlSerializable).ReadXml(reader);
            }),
                new Tuple <string, Action>(
                    "node", () =>
            {
                var node = new Node();
                (node as IXmlSerializable).ReadXml(reader);
                if (nodes == null)
                {
                    nodes = new List <Node>();
                }
                nodes.Add(node);
            }),
                new Tuple <string, Action>(
                    "way", () =>
            {
                var way = new Way();
                (way as IXmlSerializable).ReadXml(reader);
                if (ways == null)
                {
                    ways = new List <Way>();
                }
                ways.Add(way);
            }),
                new Tuple <string, Action>(
                    "relation", () =>
            {
                var relation = new Relation();
                (relation as IXmlSerializable).ReadXml(reader);
                if (relations == null)
                {
                    relations = new List <Relation>();
                }
                relations.Add(relation);
            }),
                new Tuple <string, Action>(
                    "changeset", () =>
            {
                var changeset = new Changeset();
                (changeset as IXmlSerializable).ReadXml(reader);
                if (changesets == null)
                {
                    changesets = new List <Changeset>();
                }
                changesets.Add(changeset);
            }));

            if (nodes != null)
            {
                this.Nodes = nodes.ToArray();
            }
            if (ways != null)
            {
                this.Ways = ways.ToArray();
            }
            if (relations != null)
            {
                this.Relations = relations.ToArray();
            }
            if (changesets != null)
            {
                this.Changesets = changesets.ToArray();
            }
        }
示例#6
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();
        }
示例#7
0
 void IXmlSerializable.ReadXml(XmlReader reader)
 {
     this.Maximum = reader.GetAttributeDouble("maximum");
 }
示例#8
0
        void IXmlSerializable.ReadXml(XmlReader reader)
        {
            this.Version   = reader.GetAttributeDouble("version");
            this.Generator = reader.GetAttribute("generator");

            List <Node>      nodes      = null;
            List <Way>       ways       = null;
            List <Relation>  relations  = null;
            List <Changeset> changesets = null;
            List <GpxFile>   gpxFiles   = null;
            List <User>      users      = null;
            List <Note>      notes      = null;

            reader.GetElements(
                new Tuple <string, Action>(
                    "api", () =>
            {
                this.Api = new Capabilities();
                (this.Api as IXmlSerializable).ReadXml(reader);
            }),
                new Tuple <string, Action>(
                    "bounds", () =>
            {
                this.Bounds = new Bounds();
                (this.Bounds as IXmlSerializable).ReadXml(reader);
                reader.Read();
            }),
                new Tuple <string, Action>(
                    "node", () =>
            {
                var node = new Node();
                (node as IXmlSerializable).ReadXml(reader);
                if (nodes == null)
                {
                    nodes = new List <Node>();
                }
                nodes.Add(node);
            }),
                new Tuple <string, Action>(
                    "way", () =>
            {
                var way = new Way();
                (way as IXmlSerializable).ReadXml(reader);
                if (ways == null)
                {
                    ways = new List <Way>();
                }
                ways.Add(way);
            }),
                new Tuple <string, Action>(
                    "relation", () =>
            {
                var relation = new Relation();
                (relation as IXmlSerializable).ReadXml(reader);
                if (relations == null)
                {
                    relations = new List <Relation>();
                }
                relations.Add(relation);
            }),
                new Tuple <string, Action>(
                    "changeset", () =>
            {
                var changeset = new Changeset();
                (changeset as IXmlSerializable).ReadXml(reader);
                if (changesets == null)
                {
                    changesets = new List <Changeset>();
                }
                changesets.Add(changeset);
            }),
                new Tuple <string, Action>(
                    "user", () =>
            {
                var user = new User();
                (user as IXmlSerializable).ReadXml(reader);
                if (users == null)
                {
                    users = new List <User>();
                }
                users.Add(user);
            }),
                new Tuple <string, Action>(
                    "note", () =>
            {
                var note = new Note();
                (note as IXmlSerializable).ReadXml(reader);
                if (note.Id.HasValue)         // Ignore Notes missing content.
                {
                    if (notes == null)
                    {
                        notes = new List <Note>();
                    }
                    notes.Add(note);
                }
            }),
                new Tuple <string, Action>(
                    "policy", () =>
            {
                this.Policy = new Policy();
                (this.Policy as IXmlSerializable).ReadXml(reader);
            }),
                new Tuple <string, Action>(
                    "permissions", () =>
            {
                this.Permissions = new Permissions();
                (this.Permissions as IXmlSerializable).ReadXml(reader);
            }),
                new Tuple <string, Action>(
                    "preferences", () =>
            {
                this.Preferences = new Preferences();
                (this.Preferences as IXmlSerializable).ReadXml(reader);
            }),
                new Tuple <string, Action>(
                    "gpx_file", () =>
            {
                var gpxFile = new GpxFile();
                (gpxFile as IXmlSerializable).ReadXml(reader);
                if (gpxFiles == null)
                {
                    gpxFiles = new List <GpxFile>();
                }
                gpxFiles.Add(gpxFile);
            }));

            if (nodes != null)
            {
                this.Nodes = nodes.ToArray();
            }
            if (ways != null)
            {
                this.Ways = ways.ToArray();
            }
            if (relations != null)
            {
                this.Relations = relations.ToArray();
            }
            if (changesets != null)
            {
                this.Changesets = changesets.ToArray();
            }
            if (gpxFiles != null)
            {
                this.GpxFiles = gpxFiles.ToArray();
            }
            if (users != null)
            {
                if (users.Count == 1)
                {
                    this.User = users[0];
                }
                else
                {
                    this.Users = users.ToArray();
                }
            }
            if (notes != null)
            {
                this.Notes = notes.ToArray();
            }
        }
        protected Release ReadRelease(XmlReader reader)
        {
            reader.AssertElementStart(Keys.Release);

            Release release = new Release();
            release.JoinedAlbumArtists = reader.GetAttributeOrNull(Keys.JoinedAlbumArtists);
            release.Title = reader.GetAttributeOrNull(Keys.Title);
            release.ReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.ReleaseDate));
            release.OriginalReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.OriginalReleaseDate));
            release.CatalogNumber = reader.GetAttributeOrNull(Keys.CatalogNumber);
            release.Label = reader.GetAttributeOrNull(Keys.Label);
            release.Country = reader.GetAttributeOrNull(Keys.Country);
            release.FlagMessage = reader.GetAttributeOrNull(Keys.FlagMessage);
            release.IsFlagged = release.FlagMessage != null;
            release.Notes = reader.GetAttributeOrNull(Keys.Notes);
            release.WikipediaPageName = reader.GetAttributeOrNull(Keys.WikipediaPageName);

            release.DiscogsReleaseId = reader.GetAttributeInt32(Keys.DiscogsReleaseId, 0);
            release.DiscogsMasterId = reader.GetAttributeInt32(Keys.DiscogsMasterId, 0);
            release.Genre = reader.GetAttributeOrNull(Keys.Genre);
            release.Score = reader.GetAttributeInt32(Keys.Score, 0);
            release.DynamicRange = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN);
            release.ReplayGainAlbumGain = reader.GetAttributeDouble(Keys.AlbumGain, double.NaN);
            release.ReplayGainAlbumPeak = reader.GetAttributeDouble(Keys.AlbumPeak, double.NaN);

            if (reader.GetAttributeOrNull(Keys.DateAdded) != null)
            {
                release.DateAdded = new DateTime(reader.GetAttributeInt64(Keys.DateAdded, 0));
            }
            if (reader.GetAttributeOrNull(Keys.DateAudioModified) != null)
            {
                release.DateAudioModified = new DateTime(reader.GetAttributeInt64(Keys.DateAudioModified, 0));
            }
            if (reader.GetAttributeOrNull(Keys.DateModified) != null)
            {
                release.DateModified = new DateTime(reader.GetAttributeInt64(Keys.DateModified, 0));
            }

            if (reader.IsEmptyElement)
            {
                throw new FormatException(InvalidXmlDatabase);
            }

            while (reader.Read())
            {
                if (reader.IsElementEnd(Keys.Release))
                {
                    break;
                }

                if (reader.IsElementStart(Keys.Artists))
                {
                    this.ReadArtists(reader, release);
                }
                else if (reader.IsElementStart(Keys.Tracks))
                {
                    this.ReadTracks(reader, release);
                }
                else if (reader.IsElementStart(Keys.Images))
                {
                    this.ReadImages(reader, release);
                }
                else if (reader.IsElementStart(Keys.AdditionalFiles))
                {
                    this.ReadAdditionalFiles(reader, release);
                }
            }

            return release;
        }
        private Track ReadTrack(XmlReader reader)
        {
            reader.AssertElementStart(Keys.Track);

            Track track = new Track()
            {
                Disc = reader.GetAttributeInt32(Keys.Disc, 0),
                Position = reader.GetAttributeInt32(Keys.Position, 0),
                Title = reader.GetAttributeOrNull(Keys.Title),
                JoinedArtists = reader.GetAttributeOrNull(Keys.JoinedArtists),
                RelativeFilename = reader.GetAttributeOrNull(Keys.RelativeFilename),
                DynamicRange = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN),
                ReplayGainTrackGain = reader.GetAttributeDouble(Keys.TrackGain, double.NaN),
                ReplayGainTrackPeak = reader.GetAttributeDouble(Keys.TrackPeak, double.NaN),
            };

            if (reader.IsEmptyElement)
            {
                return track;
            }

            while (reader.Read())
            {
                if (reader.IsElementEnd(Keys.Track))
                {
                    break;
                }

                if (reader.IsElementStart(Keys.Artists))
                {
                    this.ReadTrackArtists(reader, track);
                }
                else
                {
                    throw new FormatException(InvalidXmlDatabase);
                }
            }

            return track;
        }
示例#11
0
        protected Release ReadRelease(XmlReader reader)
        {
            reader.AssertElementStart(Keys.Release);

            Release release = new Release();

            release.JoinedAlbumArtists = reader.GetAttributeOrNull(Keys.JoinedAlbumArtists);
            release.Title               = reader.GetAttributeOrNull(Keys.Title);
            release.ReleaseDate         = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.ReleaseDate));
            release.OriginalReleaseDate = ReleaseDate.Parse(reader.GetAttributeOrNull(Keys.OriginalReleaseDate));
            release.CatalogNumber       = reader.GetAttributeOrNull(Keys.CatalogNumber);
            release.Label               = reader.GetAttributeOrNull(Keys.Label);
            release.Country             = reader.GetAttributeOrNull(Keys.Country);
            release.FlagMessage         = reader.GetAttributeOrNull(Keys.FlagMessage);
            release.IsFlagged           = release.FlagMessage != null;
            release.Notes               = reader.GetAttributeOrNull(Keys.Notes);
            release.WikipediaPageName   = reader.GetAttributeOrNull(Keys.WikipediaPageName);

            release.DiscogsReleaseId    = reader.GetAttributeInt32(Keys.DiscogsReleaseId, 0);
            release.DiscogsMasterId     = reader.GetAttributeInt32(Keys.DiscogsMasterId, 0);
            release.Genre               = reader.GetAttributeOrNull(Keys.Genre);
            release.Score               = reader.GetAttributeInt32(Keys.Score, 0);
            release.DynamicRange        = reader.GetAttributeDouble(Keys.DynamicRange, double.NaN);
            release.ReplayGainAlbumGain = reader.GetAttributeDouble(Keys.AlbumGain, double.NaN);
            release.ReplayGainAlbumPeak = reader.GetAttributeDouble(Keys.AlbumPeak, double.NaN);

            if (reader.GetAttributeOrNull(Keys.DateAdded) != null)
            {
                release.DateAdded = new DateTime(reader.GetAttributeInt64(Keys.DateAdded, 0));
            }
            if (reader.GetAttributeOrNull(Keys.DateAudioModified) != null)
            {
                release.DateAudioModified = new DateTime(reader.GetAttributeInt64(Keys.DateAudioModified, 0));
            }
            if (reader.GetAttributeOrNull(Keys.DateModified) != null)
            {
                release.DateModified = new DateTime(reader.GetAttributeInt64(Keys.DateModified, 0));
            }

            if (reader.IsEmptyElement)
            {
                throw new FormatException(InvalidXmlDatabase);
            }

            while (reader.Read())
            {
                if (reader.IsElementEnd(Keys.Release))
                {
                    break;
                }

                if (reader.IsElementStart(Keys.Artists))
                {
                    this.ReadArtists(reader, release);
                }
                else if (reader.IsElementStart(Keys.Tracks))
                {
                    this.ReadTracks(reader, release);
                }
                else if (reader.IsElementStart(Keys.Images))
                {
                    this.ReadImages(reader, release);
                }
                else if (reader.IsElementStart(Keys.AdditionalFiles))
                {
                    this.ReadAdditionalFiles(reader, release);
                }
            }

            return(release);
        }