Reading in XML/KML files using C#
You didn't include any code, but I would guess that you forgot to include your namespace when referencing things. Here is an example.
Basic access:
var placemarks = xdoc.Element("kml").Element("Document").Elements("Placemark");
Using namespaces:
var ns = XNamespace.Get("http://earth.google.com/kml/2.2");var placemarks = xdoc.Element(ns + "kml").Element(ns + "Document").Elements(ns + "Placemark");
My guess is that you've forgotten to use the namespace in your LINQ to XML queries. It's easy enough to extract the data from this:
XNamespace ns = "http://earth.google.com/kml/2.2";var doc = XDocument.Load("file.xml");var query = doc.Root .Element(ns + "Document") .Elements(ns + "Placemark") .Select(x => new PlaceMark // I assume you've already got this { Name = x.Element(ns + "name").Value, Description = x.Element(ns + "description").Value, // etc });
If that doesn't help, please post a complete example of what you've tried, and what went wrong.
I used SharmpKml and its documentation to extract information from KML file.
using SharpKml.Dom;using SharpKml.Engine;using SharpKml.Dom.GX;TextReader reader = File.OpenText(filePath);KmlFile file = KmlFile.Load(reader);_kml = file.Root as Kml;sPlaceMarks[] tempPlaceMarks = new sPlaceMarks[1000];if (_kml != null){ foreach (var placemark in _kml.Flatten().OfType<Placemark>()) { tempPlaceMarks[numOfPlaceMarks].Name = placemark.Name; tempPlaceMarks[numOfPlaceMarks].Description = placemark.Description.Text; tempPlaceMarks[numOfPlaceMarks].StyleUrl = placemark.StyleUrl; tempPlaceMarks[numOfPlaceMarks].point = placemark.Geometry as SharpKml.Dom.Point; tempPlaceMarks[numOfPlaceMarks].CoordinateX = tempPlaceMarks[numOfPlaceMarks].point.Coordinate.Longitude; tempPlaceMarks[numOfPlaceMarks].CoordinateY = tempPlaceMarks[numOfPlaceMarks].point.Coordinate.Latitude; tempPlaceMarks[numOfPlaceMarks].CoordinateZ = tempPlaceMarks[numOfPlaceMarks].point.Coordinate.Altitude; numOfPlaceMarks++; } foreach (var lookAt in _kml.Flatten().OfType<LookAt>()) { Placemark placemark = (Placemark)lookAt.Parent; for (int i = 0; i < numOfPlaceMarks; i++) { if (placemark.Name == tempPlaceMarks[i].Name) { tempPlaceMarks[i].Name = placemark.Name; tempPlaceMarks[i].Description = placemark.Description.Text; tempPlaceMarks[i].StyleUrl = placemark.StyleUrl; tempPlaceMarks[i].altitude = lookAt.Altitude; tempPlaceMarks[i].AltitudeMode =(SharpKml.Dom.GX.AltitudeMode)lookAt.GXAltitudeMode; tempPlaceMarks[i].Heading = lookAt.Heading; tempPlaceMarks[i].Latitude = lookAt.Latitude; tempPlaceMarks[i].Longitude = lookAt.Longitude; tempPlaceMarks[i].Range = lookAt.Range; tempPlaceMarks[i].Tilt = lookAt.Tilt; break; } }}