From 12c83b533d822cf45c643edafe7fbe14f7329d9a Mon Sep 17 00:00:00 2001 From: bartvde Date: Thu, 12 Nov 2009 15:28:20 +0000 Subject: [PATCH] adding limited support for reading SimpleData from KML ExtendedData SchemaData, keeping structure the same as current ExtendedData support, patch=joh, r=me (closes #2062) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9795 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Format/KML.js | 19 ++++++++++++---- tests/Format/KML.html | 42 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/lib/OpenLayers/Format/KML.js b/lib/OpenLayers/Format/KML.js index b42644e2c3..177aee37fb 100644 --- a/lib/OpenLayers/Format/KML.js +++ b/lib/OpenLayers/Format/KML.js @@ -884,16 +884,17 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, { /** * Method: parseExtendedData - * Parse ExtendedData from KML. No support for schemas/datatypes. + * Parse ExtendedData from KML. Limited support for schemas/datatypes. * See http://code.google.com/apis/kml/documentation/kmlreference.html#extendeddata * for more information on extendeddata. */ parseExtendedData: function(node) { var attributes = {}; + var i, len, data, key; var dataNodes = node.getElementsByTagName("Data"); - for (var i = 0, len = dataNodes.length; i < len; i++) { - var data = dataNodes[i]; - var key = data.getAttribute("name"); + for (i = 0, len = dataNodes.length; i < len; i++) { + data = dataNodes[i]; + key = data.getAttribute("name"); var ed = {}; var valueNode = data.getElementsByTagName("value"); if (valueNode.length) { @@ -905,6 +906,16 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, { } attributes[key] = ed; } + var simpleDataNodes = node.getElementsByTagName("SimpleData"); + for (i = 0, len = simpleDataNodes.length; i < len; i++) { + var ed = {}; + data = simpleDataNodes[i]; + key = data.getAttribute("name"); + ed['value'] = this.getChildValue(data); + ed['displayName'] = key; + attributes[key] = ed; + } + return attributes; }, diff --git a/tests/Format/KML.html b/tests/Format/KML.html index eb28f64b7a..cea45f7de1 100644 --- a/tests/Format/KML.html +++ b/tests/Format/KML.html @@ -160,6 +160,16 @@ t.eq(features[0].attributes.all_bridges.displayName, "all bridges", "read displayName from extendeddata correctly."); } + function test_Format_KML_extendedData_SchemaData(t) { + t.plan(4); + var f = new OpenLayers.Format.KML(); + var features = f.read(OpenLayers.Util.getElement("kml_extendeddata2").value); + t.eq(features[0].attributes.TrailHeadName.value, "Pi in the sky", "read value from extendeddata (schema data) correctly."); + t.eq(features[0].attributes.TrailHeadName.displayName, "TrailHeadName", "read displayName from extendeddata correctly"); + t.eq(features[0].attributes.ElevationGain.value, "10", "read value from extendeddata (schema data) correctly."); + t.eq(features[0].attributes.ElevationGain.displayName, "ElevationGain", "read displayName from extendeddata correctly"); + } + @@ -208,6 +218,38 @@ + +